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