Opera HTML5视频readyState == 2而不是等于4

时间:2014-04-01 17:13:29

标签: javascript jquery html5 html5-video readystate

在其他4个主要浏览器(Chrome,Firefox,IE和Safari)上,readyState变为4,我的代码执行得很好。但是在Opera上,readyState只达到2并且永远不会达到4。

代码:

var createSeekslider = function() {
    if($atVideo[0].readyState == 4) {
        var videoDuration = $atVideo[0].duration;
        $seekSlider = $('.videoSeekslider').slider({
            orientation:'horizontal',
            range:'min',
            min:0,
            max:videoDuration,
            value:0,
            step:0.01,
            animate:true,

            slide: function(event, ui) {
                $atVideo[0].currentTime = ui.value;
            }
        }); //End of (seekslider).slider function       
        } else {
            setTimeout(createSeekslider, 150);
        }
    }
createSeekslider();

非常感谢任何帮助!!

1 个答案:

答案 0 :(得分:0)

我没有尝试捕捉readyState等于4的时刻,而是建议略微不同的策略 - 处理canplaythrough事件:

$atVideo[0].addEventListener('canplaythrough', function() {
  // actually, `$atVideo[0].oncanplaythrough = function()` should do fine too
  $seekSlider = $('.videoSeekslider').slider({
    orientation: 'horizontal',
    range: 'min',
    min: 0,
    max: this.duration,
    value: 0,
    step: 0.01,
    animate: true,
    slide: (function(event, ui) {
      this.currentTime = ui.value;
    }).bind(this)
  });
});

我怀疑您的问题与this issue中描述的相同:简而言之,Opera在开始加载视频后立即将readyState设置为4(HAVE_ENOUGH_DATA),然后将其切换到2(HAVE_CURRENT_DATA)当它的一些重要部分被加载时 - 这对setTimeout计划的检查来说太快了。