[whatwg] <video> ... <script> race condition
Henri Sivonen
hsivonen at iki.fi
Fri May 13 03:25:39 PDT 2011
On Fri, 2011-05-13 at 11:40 +0200, Philip Jägenstedt wrote:
> Problem:
>
> <video src="video.webm"></video>
> ...
> <script>
> document.querySelector('video').oncanplay = function() {
> /* will it run? */
> };
> </script>
>
> In the above the canplay event can be replaced with many others, like
> loadedmetadata and loadeddata. Whether or not the event handler has been
> registered by the time the event is fired depends on how fast decoding is,
> how fast the network is and how much "..." there is.
>
> This is not new information, Simon Pieters wrote extensively about the
> problem in
> http://dev.opera.com/articles/view/consistent-event-firing-with-html5-video/
>
> The reason I write now is that in one of our projects this exact race
> condition happens to be hit for http://html5demos.com/video which is where
> the above code snippet comes from.
>
> Does anyone have ideas about how to deal with this problem, which *is*
> going to appear on many real-world pages?
<iframe src=foo.html></iframe>
<script>
document.querySelector('iframe').onload = function() {
/* will it run? */
};
</script>
has the same problem. The solution is using the onload markup attribute
that calls a function declared in an earlier <script>:
<script>
function iframeLoaded() {
/* It will run! */
}
</script>
<iframe src=foo.html onload=iframeLoaded()></iframe>
Separation of markup and event handlers is overrated.
--
Henri Sivonen
hsivonen at iki.fi
http://hsivonen.iki.fi/
More information about the whatwg
mailing list