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; } 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); + } + }); + }); +});