From 8f96f0cf33e25151aa62f0a5da696fb230b759a6 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 7 Sep 2018 16:16:32 -0700 Subject: [PATCH] Fix scroll position not being restored on release notes Fixes #45571 --- .../parts/webview/electron-browser/webview-pre.js | 10 +++++----- .../parts/webview/electron-browser/webviewEditor.ts | 5 ++--- .../parts/webview/electron-browser/webviewElement.ts | 10 ++++++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/parts/webview/electron-browser/webview-pre.js b/src/vs/workbench/parts/webview/electron-browser/webview-pre.js index 116392df7e9..24a74cdfac7 100644 --- a/src/vs/workbench/parts/webview/electron-browser/webview-pre.js +++ b/src/vs/workbench/parts/webview/electron-browser/webview-pre.js @@ -99,7 +99,7 @@ return; } - const progress = event.target.body.scrollTop / event.target.body.clientHeight; + const progress = event.currentTarget.scrollY / event.target.body.clientHeight; if (isNaN(progress)) { return; } @@ -312,10 +312,10 @@ var setInitialScrollPosition; if (firstLoad) { firstLoad = false; - setInitialScrollPosition = (body) => { + setInitialScrollPosition = (body, window) => { if (!isNaN(initData.initialScrollProgress)) { if (body.scrollTop === 0) { - body.scrollTop = body.clientHeight * initData.initialScrollProgress; + window.scroll(0, body.clientHeight * initData.initialScrollProgress); } } }; @@ -323,7 +323,7 @@ const scrollY = frame && frame.contentDocument && frame.contentDocument.body ? frame.contentDocument.body.scrollTop : 0; setInitialScrollPosition = (body) => { if (body.scrollTop === 0) { - body.scrollTop = scrollY; + window.scroll(0, scrollY); } }; } @@ -360,7 +360,7 @@ if (contentDocument.body) { // Workaround for https://github.com/Microsoft/vscode/issues/12865 // check new scrollTop and reset if neccessary - setInitialScrollPosition(contentDocument.body); + setInitialScrollPosition(contentDocument.body, contentWindow); // Bubble out link clicks contentDocument.body.addEventListener('click', handleInnerClick); diff --git a/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts b/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts index 711902fb775..a777e18f837 100644 --- a/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts +++ b/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts @@ -184,14 +184,13 @@ export class WebviewEditor extends BaseWebviewEditor { private updateWebview(input: WebviewEditorInput) { const webview = this.getWebview(input); input.claimWebview(this); - webview.options = { + webview.update(input.html, { allowScripts: input.options.enableScripts, allowSvgs: true, enableWrappedPostMessage: true, useSameOriginForRoot: false, localResourceRoots: input.options.localResourceRoots || this.getDefaultLocalResourceRoots() - }; - input.html = input.html; + }); if (this._webviewContent) { this._webviewContent.style.visibility = 'visible'; diff --git a/src/vs/workbench/parts/webview/electron-browser/webviewElement.ts b/src/vs/workbench/parts/webview/electron-browser/webviewElement.ts index 49e8e9257c8..9cb3d563c43 100644 --- a/src/vs/workbench/parts/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/parts/webview/electron-browser/webviewElement.ts @@ -267,6 +267,16 @@ export class WebviewElement extends Disposable { }); } + public update(value: string, options: WebviewOptions) { + this._contents = value; + this._options = options; + this._send('content', { + contents: this._contents, + options: this._options, + state: this._state + }); + } + public set baseUrl(value: string) { this._send('baseUrl', value); } -- GitLab