javascript - Firefox 上不会调用 HTML5 视频的 canplay/canplaythrough 事件。为什么?

标签 javascript jquery html5-video

我正在构建一个用于管理 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/

相关文章:

android - 如何在 Android 平板电脑上播放 "autoplay"HTML5 视频

javascript - 无法刷新 Angularjs 中的 ng-repeat

javascript - polymer + requirejs : Attributes on were data bound prior to Polymer upgrading the element

javascript - 在 Rhino JS 上下文中动态声明函数

html - 使用 AdSupport for VAST/VPAID 构建 Kaltura HTML5 视频播放器

internet-explorer - MS Edge 和 IE 11 不支持 html5 视频元素

javascript - 如何规范化/非规范化一棵树?

php - 如何使用 JavaScript 和 PHP 来存储变量?

javascript - Jquery 每个等待模态关闭

jquery - 当表头单元格中出现 colspan 时,DataTables 抛出错误