diff --git a/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts b/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts index 43775d62aba45226f221c493c446a57c8182ffec..755a337fc24a44620bfdea4f4f1da7c8a3cf4a77 100644 --- a/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts +++ b/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts @@ -81,7 +81,7 @@ export class HtmlPreviewPart extends WebviewEditor { private get webview(): Webview { if (!this._webview) { - this._webview = new Webview(this._container, this.partService.getContainer(Parts.EDITOR_PART)); + this._webview = new Webview(this._container, this.partService.getContainer(Parts.EDITOR_PART), { enableJavascript: true }); this._webview.baseUrl = this._baseUrl && this._baseUrl.toString(true); if (this.input && this.input instanceof HtmlInput) { const state = this.loadViewState(this.input.getResource()); diff --git a/src/vs/workbench/parts/html/browser/webview-pre.js b/src/vs/workbench/parts/html/browser/webview-pre.js index 0abf15e97f8cdfb2eb32a16ae0f147973a375e23..4a14b47f4dadc0b74b646624c075e7756323512c 100644 --- a/src/vs/workbench/parts/html/browser/webview-pre.js +++ b/src/vs/workbench/parts/html/browser/webview-pre.js @@ -121,8 +121,9 @@ }); // update iframe-contents - ipcRenderer.on('content', function (_event, value) { - const text = value.join('\n'); + ipcRenderer.on('content', function (_event, data) { + const options = data.options; + const text = data.contents.join('\n'); const newDocument = new DOMParser().parseFromString(text, 'text/html'); // know what happens here @@ -188,7 +189,7 @@ const newFrame = document.createElement('iframe'); newFrame.setAttribute('id', 'pending-frame'); newFrame.setAttribute('frameborder', '0'); - newFrame.setAttribute('sandbox', 'allow-scripts allow-forms allow-same-origin'); + newFrame.setAttribute('sandbox', options.enableJavascript ? 'allow-scripts allow-forms allow-same-origin' : 'allow-same-origin'); newFrame.style.cssText = "margin: 0; overflow: hidden; position: absolute; width: 100%; height: 100%; display: none"; document.body.appendChild(newFrame); diff --git a/src/vs/workbench/parts/html/browser/webview.ts b/src/vs/workbench/parts/html/browser/webview.ts index 38005084ab2e2db63ecdcbcd74b1e561a8b8e1f4..6b45dbafd207b9581b521986aba8f298663753bb 100644 --- a/src/vs/workbench/parts/html/browser/webview.ts +++ b/src/vs/workbench/parts/html/browser/webview.ts @@ -43,6 +43,10 @@ MenuRegistry.addCommand({ type ApiThemeClassName = 'vscode-light' | 'vscode-dark' | 'vscode-high-contrast'; +export interface WebviewOptions { + enableJavascript?: boolean; +} + export default class Webview { private _webview: WebviewElement; @@ -55,7 +59,8 @@ export default class Webview { constructor( private parent: HTMLElement, - private _styleElement: Element + private _styleElement: Element, + private options: WebviewOptions = {} ) { this._webview = document.createElement('webview'); @@ -158,7 +163,10 @@ export default class Webview { } set contents(value: string[]) { - this._send('content', value); + this._send('content', { + contents: value, + options: this.options + }); } set baseUrl(value: string) {