I have a question about section 3.7.2. Under step 5, it says that it is
considered a reentrant invocation of parser if the document.write() method was
called from script executing inline. Does this include document.write() calls
invoked from user actions (e.g. onclick)? I assume not, but I'm getting varying
behavior from the major browsers for this test case (click on the button to
run):
---
<HTML><HEAD>
<script id="outter" type="text/javascript">
function doDoc() {
document.write('I am <scr'+'ipt type="text/javascript" id=inner
src=code.js></scr'+'ipt>the <b>document</b>');
document.close();
}
</script>
</HEAD><BODY>
<button onclick="doDoc()">runDoc</button>
</BODY></HTML>
---
Inside code.js:
---
document.write('<img src="testIMG.jpg" />');
---
testIMG.jpg is some image.
Chrome2/Safari4beta, Firefox3: the image shows up in the middle of the
sentence, where the script tag is. This seems to go with the interpretation
that the document.write call is not reentrant.
Opera10: the image shows up at the end of the sentence, which goes with the
interpretation that the document.write call *is* reentrant (and there's a
missing step in the spec to run any pending external scripts at the end of
section 3.7.2)
IE6: doesn't seem to run that nested script at all as far as I can tell, which
seems to also go with the interpretation that it's not reentrant and there's no
missing steps in the spec.
If my interpretation of the spec is correct, The Webkit/Gecko behavior is
correct, and Opera/IE are incorrect. Thoughts?
Cheers,
kats