[whatwg] Link.onload; defer on style, depends

Ian Hickson wrote:
> So testing this:
> 
>    http://software.hixie.ch/utilities/js/live-dom-viewer/saved/44
>    http://software.hixie.ch/utilities/js/live-dom-viewer/saved/45
> 
> (44 uses currentStyle, for IE/Opera, 45 uses getComputedStyle, for Opera/ 
> Firefox/Safari)
> 
> It seems Gecko is the only engine that blocks here.

That's quite odd.  The behavior this is showing in Safari, in 
particular, is the one described in 
<http://webkit.org/blog/66/the-fouc-problem/>, and last I'd heard that 
was causing compat issues and was going to be changed.  Specifically, 
see <https://bugzilla.mozilla.org/show_bug.cgi?id=84582#c16>.   Maybe it 
hasn't been changed after all?

> It would be interesting to hear from other browser vendors about their 
> opinions on this issue.

I would too.

>> No.  What's paused is execution of new scripts, not of existing ones. So in
>> this case, b() executes immediately, while a() executes after the stylesheet
>> loads.
> 
> Woah, so this can affect the order of script execution?

Yes, just like document.write(<script src=...>) would, no?

> That seems very dangerous. What if b() depends on a()? I would be 
> surprised if this didn't cause compatibility problems.

For what it's worth, we shipped this behavior in Firefox 3.0 and I have 
yet to see a bug report about anything other than rare instances of 
flashes of unstyled content due to scripts in one frame forcing layout 
in another while stylesheets are still loading in the latter.

> On Sat, 14 Mar 2009, Greg Houston wrote:
>> On a side note, I can actually attach a functioning onload event to a
>> link element in Internet Explorer. Firefox, Safari, and Chrome ignore
>> my attempt, and Opera will fire the onload event but not update the
>> style of the page.
> 
> Since there are already implementations of this I've gone ahead and 
> defined it.

I have a question about this text.  It says that the load event is fired 
asynchronously; that's fine.  However, the page load event is fired 
synchronously on completion of network activity in some cases (at least 
in Gecko).  Which means that if no steps are taken to prevent it, if the 
last resource loading is a stylesheet the load event for the page will 
fire before the load event for the stylesheet.  It's not clear to me 
whether this is ok per the spec text.  Note that for image load events 
such steps to prevent are in fact taken (a pending image load event 
blocks the page onload from firing).

-Boris

Received on Wednesday, 25 March 2009 07:52:04 UTC