I have a test case that works in major browsers (FF, Opera, Safari, IE6) but 
that I don't think would work if the they followed the behavior as currently 
specified in HTML5. I've put the test case online:

http://stakface.com/pub/mango/ext7.html

The assertion "document.getElementById('r').firstChild.data == 'PASS'" is true 
after the page has loaded, whereas according to the spec I don't think it 
shouldn't be.

The steps are roughly as follows:
- tokenize/treebuild ext7.html until the first closing script tag is found (for 
the 7a.js script)
- run the script. this sets 7a.js to be the "pending external script"
- execute the "pending external script" (7a.js) since it's not a re-entrant 
invocation of the tree builder
--- insert the 7b.js line into the input stream
--- tokenize/treebuild the 7b.js script tag until the </script> for 7b.js is 
found
--- run the script. this sets 7b.js to be the "pending external script"
--- now, since there is a "pending external script" and this is a re-entrant 
invocation, set the pause flag to true and bail
--- insert the other stuff in 7a.js into the input stream
--- since the parser pause flag is set this other stuff does NOT get 
tokenized/treebuilt yet
- 7a.js finishes executing, and now we have a new "pending external script", 
which is 7b.js
- execute 7b.js
--- throws
- continue processing input stream (this now has the contents of the 
document.write calls from 7a.js, line 2 onwards)
- tokenize/treebuild the input stream until the </script> that was 
document.write'd at the bottom of 7a.js is encountered
- execute the script
--- insert the div into the input stream
--- since the parser pause flag is still set the div does NOT get 
tokenized/treebuilt
--- run the line that sets .firstChild.data to PASS. since the div isn't in the 
DOM yet, this throws and the script is done
- unwind back to the treebuilder, which clears the parser pause flag since the 
script nesting level drops to zero
- tokenize/treebuild the input stream, which contains the div tag
- add div with content FAIL to the DOM
- done

Here, I think the pause flag needs to get cleared earlier, so that when the div 
is inserted into the input stream, it gets tokenized and added to the DOM. This 
would make the behavior consistent with what I'm seeing in major browsers. 
Thoughts?

kats

Reply via email to