diff --git a/extensions/markdown-language-features/preview-src/index.ts b/extensions/markdown-language-features/preview-src/index.ts index 4c03209e06b..4b012c5eeb1 100644 --- a/extensions/markdown-language-features/preview-src/index.ts +++ b/extensions/markdown-language-features/preview-src/index.ts @@ -77,10 +77,16 @@ onceDocumentLoaded(() => { doAfterImagesLoaded(() => { // Try to scroll to fragment if available if (settings.settings.fragment) { + let fragment: string; + try { + fragment = encodeURIComponent(settings.settings.fragment); + } catch { + fragment = settings.settings.fragment; + } state.fragment = undefined; vscode.setState(state); - const element = getLineElementForFragment(settings.settings.fragment, documentVersion); + const element = getLineElementForFragment(fragment, documentVersion); if (element) { scrollDisabledCount += 1; scrollToRevealSourceLine(element.line, documentVersion, settings); diff --git a/extensions/markdown-language-features/src/preview/preview.ts b/extensions/markdown-language-features/src/preview/preview.ts index ef01cb50d07..828442a76e5 100644 --- a/extensions/markdown-language-features/src/preview/preview.ts +++ b/extensions/markdown-language-features/src/preview/preview.ts @@ -37,7 +37,7 @@ export class PreviewDocumentVersion { interface MarkdownPreviewDelegate { getTitle?(resource: vscode.Uri): string; getAdditionalState(): {}; - openPreviewLinkToMarkdownFile(markdownLink: vscode.Uri, fragment: string): void; + openPreviewLinkToMarkdownFile(markdownLink: vscode.Uri, fragment: string | undefined): void; } class MarkdownPreview extends Disposable implements WebviewResourceProvider { @@ -410,7 +410,7 @@ class MarkdownPreview extends Disposable implements WebviewResourceProvider { try { const doc = await vscode.workspace.openTextDocument(vscode.Uri.from(resolved.uri)); if (isMarkdownFile(doc)) { - return this._delegate.openPreviewLinkToMarkdownFile(doc.uri, resolved.fragment ?? ''); + return this._delegate.openPreviewLinkToMarkdownFile(doc.uri, resolved.fragment ? decodeURIComponent(resolved.fragment) : undefined); } } catch { // Noop