- From: Ian Hickson <ian@hixie.ch>
- Date: Thu, 12 Feb 2009 06:55:18 +0000 (UTC)
On Tue, 20 Jan 2009, Kartikaya Gupta wrote: > > 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 I think the parser pause flag gets set to false again here. > - 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 Why is it still set? > --- 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? Could you reannotate the above but with the script nesting level explicitly given at each step? -- Ian Hickson U+1047E )\._.,--....,'``. fL http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,. Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Wednesday, 11 February 2009 22:55:18 UTC