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 116392df7e980fd34a5350c7cf475135162761fd..24a74cdfac7ab2cfaf644faa810eda9987d88c01 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 711902fb775862d2a92eb02b8b5bc602f7b1031a..a777e18f83799c50a3340cd4653449cd2eca1581 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 49e8e9257c8405c9c6aa9bb821ae2a613da4e1b5..9cb3d563c43ab69a0d4a52fe19ed0285e5cd5f03 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); }