JavaScript 可以播放附加到 window 对象的事件?

JavaScript canplay event attached to window object?

我在<head>中有以下代码:

var canplay = false;
if (window.addEventListener) {
    window.addEventListener('canplay', function(ev) {
        canplay = true;
    }, true);
}

后来我有一个 addEventListener 附加到视频,但它没有触发,因为 canplay 已经被触发(并由上面的代码处理)。

没关系,但为什么我们将该事件侦听器附加到 window 对象以及它为什么有效?

And later I have a addEventListener attached to video, but it's not firing

canplay 事件不会连续触发。它只会在缓冲区准备好播放时触发。既然你说你 later 将一个监听器附加到视频对象;也许你错过了事件被解雇的时间。但您可以随时通过 video.readyState >= video.HAVE_FUTURE_DATA

查看

why we attach that event listener to window object and why it works?

规范允许。

  • From W3C:所有 HTML 元素必须支持的事件处理程序(及其相应的事件处理程序事件类型),作为内容属性和 IDL 属性,以及在 Document 和 Window 对象...
  • From Safari HTML5 Audio and Video Guide:您可以在媒体元素或其任何父元素上安装事件侦听器,直至并包括文档正文...