Chrome视频元素可播放未触发的事件

时间:2014-01-13 23:51:25

标签: javascript google-chrome html5-video

在Windows 7和Linux上的Chrome 31(Ubuntu 13.10)中,视频元素上的事件处理程序已注册可以播放(和 oncanplay ,只是为了确保)永远不会开火。当我检查DOM节点时,没有 oncanplay 属性。 spec表示它应该存在。有没有人知道Chrome何时或是否支持此活动?

1 个答案:

答案 0 :(得分:21)

Chrome 支持canplay活动。您没有看到它,因为检查器仅显示所有元素上的属性,而不仅仅是媒体元素。它也没有显示loadedmetadatadurationchange等,但Chrome绝对支持这些。

我还没有看到你的代码,但我猜你可能会看到事件触发的原因(假设你正在正确地听它)是你错过了这个事件。除非您在视频中略微跳过,canplay只会触发一次。因此,如果事件在您附加侦听器之前触发,则为时已晚。

相反,您可以检查状态,如此......

//assume you've already set up the video variable to point to your video element
if (video.readyState >= video.HAVE_FUTURE_DATA) {
    console.log('video can play!');
} else {
    video.addEventListener('canplay', function () {
        console.log('video can play!');
    }, false);
}

(根据您要完成的操作,您可能希望以任一方式附加事件侦听器。如果您的缓冲数据用尽,视频的readyState可以恢复,canplay可能会之后再次开火。