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) {