- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Sun, 06 Sep 2009 15:16:24 -0400
- To: Ian Hickson <ian@hixie.ch>
- CC: "public-html@w3.org" <public-html@w3.org>
Ian Hickson wrote: >>> Gecko and WebKit do quite different things here, actually. >> In the absence of <script> elements created via DOM calls? What are the >> differences? > > Differences based on whether the scripts are internal or external, on > whether scripts are inserted dynamically or not, etc. Interesting... For the latter, I would absolutely believe it; I explicitly mentioned that. The former confuses me. >>> I ended up speccing the Gecko behaviour, because it is much simpler >>> (block on running any script if a style sheet is pending) >> That would be running any newly-added <script>, not running script in >> general, right? > > Right. OK. >> And pending has a somewhat nontrivial definition as well... (a >> stylesheet added via parsing a <link> or <style> element that was in the >> currently selected stylesheet set at the point when it was added to the >> DOM and is either not done loading or has an @import'ed descendant that >> is not done loading). > > I just said "applicable style sheets". Right now it's hard to be more > detailed since CSSOM isn't stable, so all this stuff isn't well-defined > yet. The key here is that applicable styles sheets that were added via explicit DOM manipulation, not via the parser, do NOT block the parser in Gecko. It sounds like they do per your current draft. Or at least that it's not really defined what the behavior should be there. > http://www.whatwg.org/specs/web-apps/current-work/#executing-a-script-block > > Step 2. Thanks. Sounds like "not really defined" to me. ;) I'm also not convinced that the "pause" behavior here is reasonable. In particular, it requires the following behavior: 1) document.write of a <script> while stylesheet loads are pending has to block the script that called write() until the stylesheets finish loading. 2) load/error events on various subresources can't fire if a <script> is hit while stylesheets are loading, until those stylesheets finish loading. Normally stylesheet loads do not prevent such events from firing. 3) loadstart/progress/loadend/emptied/abort/etc events will not fire on media elements in the situation above until the styesheets finish loading. 4) "input" events will not fire on form controls until the stylesheets load. 5) "change" events will not fire on form controls until the stylesheets load (this seems weird to me in itself; since when is onchange async?). 6) The "autofocus" attribute will have no effect until the stylesheet is loaded. 7) Some application cache stuff I don't understand won't work. 8) Clicking on an <a href> that point to a named anchor or id in the same document will do absolutely nothing, then suddenly scroll once the stylesheets load. The above are all clealy listed as requiring a task to be queued. I assume that not processing tasks also means the following (per <http://www.whatwg.org/specs/web-apps/current-work/#event-loop>): 9) The parser must be blocked (even if the script was inserted via a DOM call, not by the parser itself; normally such scripts do NOT block the parser). 10) Images whose data comes in while waiting for the stylesheets must not be shown until the stylesheet loads. Same thing for subframes, etc. For comparison, the Gecko behavior is simply to queue the <script>'s execution, block the parser if the <script> was inserted via the parser, and continue behaving normally in all other respects. -Boris
Received on Sunday, 6 September 2009 19:17:08 UTC