From 3679ee85a2157c3f1a80da0bca2e414b02643ce6 Mon Sep 17 00:00:00 2001 From: Niklas Merz Date: Sat, 16 Nov 2019 23:29:09 +0100 Subject: [PATCH] Create sandboxed iframe for worker --- src/app/tab3/tab3.page.ts | 24 +++++++++++++----------- src/assets/sandbox/sandbox.html | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 src/assets/sandbox/sandbox.html diff --git a/src/app/tab3/tab3.page.ts b/src/app/tab3/tab3.page.ts index 4307147..1320a2b 100644 --- a/src/app/tab3/tab3.page.ts +++ b/src/app/tab3/tab3.page.ts @@ -9,6 +9,7 @@ export class Tab3Page implements OnInit { text: string; editorOptions = { theme: 'vs-dark', language: 'javascript' }; code = ''; + sandboxFrame: HTMLIFrameElement; constructor() { @@ -235,20 +236,21 @@ export class Tab3Page implements OnInit { fetch('assets/sandbox/script.js').then(async (res) => { this.code = await res.text(); }); - } - parseExample() { - const worker = new Worker('assets/sandbox/sandbox.js'); - worker.postMessage({script: this.code, camtData: this.stringToParse}); - worker.onmessage = ((ev: MessageEvent) => { - this.text = ev.data; + this.sandboxFrame = document.createElement('iframe'); + this.sandboxFrame.sandbox.add('allow-scripts'); + this.sandboxFrame.src = 'assets/sandbox/sandbox.html'; + + window.addEventListener('message', (e) => { + console.debug(e); + this.text = e.data; }); - setTimeout(async () => { - worker.terminate(); - // tslint:disable-next-line: no-console - console.info('Worker terminated'); - }, 5000); + document.body.appendChild(this.sandboxFrame); + } + + parseExample() { + this.sandboxFrame.contentWindow.postMessage({ script: this.code, camtData: this.stringToParse }, '*'); } } diff --git a/src/assets/sandbox/sandbox.html b/src/assets/sandbox/sandbox.html new file mode 100644 index 0000000..b78d781 --- /dev/null +++ b/src/assets/sandbox/sandbox.html @@ -0,0 +1,16 @@ + \ No newline at end of file