我正在构建一个用于管理 HTML5 视频的 jQuery 插件。我正在 try catch canplay 和 canplaythrough 事件。在 Chrome 中,可以毫无问题地触发该事件。在 Firefox 中,有时会触发,有时不会。
我在这里稍微简化了我的代码:
$('#my_video').on('canplay canplaythrough', function(){
console.log('canplay event fired');
});
我还尝试使用 native javascript .addEventListener() 但它不起作用。
知道为什么在 Firefox 上没有调用该事件以及如何解决这个问题吗?
注意:请不要告诉我使用 jplayer 和 video-js 等已有的插件之一,我知道它们存在并且运行良好,但我必须构建一个内部解决方案。
最佳答案
问题是你的video
元素已触发canplaythrough
在注册事件处理程序之前发生事件。
正如您在自己的回答中指出的那样,您可以将脚本放在 <head>
中,但这对您的页面性能不利。
解决问题的更好方法是检查 readystate
属性并在这种情况下手动执行您的函数:
var $video = $('video'),
videoElement = $video[0];
$video.on('canplaythrough', callback);
// If the video is in the cache of the browser,
// the 'canplaythrough' event might have been triggered
// before we registered the event handler.
if (videoElement.readyState > 3) {
callback();
}
关于javascript - Firefox 上不会调用 HTML5 视频的 canplay/canplaythrough 事件。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235919/