From 2927267eb8f6b33ed868ab6e3b0ecfe2c87e580f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Mich=C3=A1lek?= Date: Thu, 29 Nov 2018 09:54:08 +0100 Subject: [PATCH 1/2] Add failing test --- test/unit/tokenprocessing.spec.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/unit/tokenprocessing.spec.js b/test/unit/tokenprocessing.spec.js index cbb76d46..32918f27 100644 --- a/test/unit/tokenprocessing.spec.js +++ b/test/unit/tokenprocessing.spec.js @@ -113,5 +113,20 @@ describe('tokenprocessing', () => { ); }); -}); + it('does something wierd.', done => { + const div = document.createElement('div'); + div.id = 'document-write-async'; + document.body.appendChild(div); + postscribe(div, '', { + releaseAsync: true, + done: () => { + expect(div.innerHTML).to.contain(''); + done(); + }, + error: (error) => { + done(error); + } + }); + }); +}); From e9d3ac7455a9e92881bfa2eb62cc71bfd143831f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Mich=C3=A1lek?= Date: Thu, 29 Nov 2018 09:54:17 +0100 Subject: [PATCH 2/2] Make the test pass --- src/write-stream.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/write-stream.js b/src/write-stream.js index 4e84dd6d..28052449 100644 --- a/src/write-stream.js +++ b/src/write-stream.js @@ -454,6 +454,11 @@ export default class WriteStream { _onScriptDone(tok) { // Pop script and check nesting. if (tok !== this.scriptStack[0]) { + if (this.deferredRemote === tok) { + // probably using document.write to output an async script with releaseAsync set to true + this.deferredRemote = null; + return; + } this.options.error({msg: 'Bad script nesting or script finished twice'}); return; }