I have a question about when scripts execute. From my reading of section 4.3.1 
it seems like if script elements are created and added to the DOM via DOM 
operations, then they should NOT be marked as parser-inserted, and should get 
run immediately (assuming no defer/async stuff). However, a page that I 
constructed to test this (below) fails in FF, Opera, and Safari (didn't test 
IE). Am I misreading the spec, or does it not accurately reflect current 
behavior? I found [1] after poking through the archives a bit, and it's 
somewhat related, but doesn't address this issue directly.

<div id="r">NOTRUN</div>
<script type="text/javascript">
 var sn = document.createElement('script');
 sn.setAttribute( 'type', 'text/javascript' );
 sn.appendChild( document.createTextNode( 
'document.getElementById("r").firstChild.data = "PASS";' ) );
 document.body.appendChild( sn );        // this runs the script and sets r's 
text to PASS (verifiable by alert)

 sn = document.createElement( 'script' );
 sn.setAttribute( 'type', 'text/javascript' );
 document.body.appendChild( sn );        // this *should* run an empty script 
block and do nothing
 // the next line should have no effect since the script already ran
 sn.appendChild( document.createTextNode( 
'document.getElementById("r").firstChild.data = "FAIL";' ) );
 // here r's text is FAIL. why?
</script>

[1] http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2007-May/011561.html

Cheers,
kats

Reply via email to