HTML 5视频自动播放功能检测

时间:2014-11-13 23:05:22

标签: javascript android ios html5 video

HTML 5视频播放()方法在移动设备上不受支持,除非该操作是用户生成的,例如来自点击/点按。这可以。我想知道的是,有一种可靠的方法来检测浏览器是否阻止了这个play()动作,当它不是用户生成时。

例如在chrome中的桌面上它没有,但在Android上它确实如此。

具体来说,我的问题是我们有第三个广告模块需要知道它是否可以在初始化时自动播放广告。对于桌面浏览器,它总是可以这样做,但对于移动浏览器,它不能。当移动浏览器(ipad上的ios 8)开始遵循no controls属性时,这最近成了一个问题。这导致广告模块将删除控件的情况,浏览器将阻止播放事件,并且用户将没有本机控件来实际启动广告并因此启动视频。 (广告模块会移除控件以阻止您浏览广告)。

我真的想避免浏览器/平台嗅探用户代理,并希望更类似于功能检测。

我目前最好的猜测是检查触摸事件功能,并假设触摸手段不允许非用户操作播放,但我希望有一些东西可以消除这种“最佳猜测”。

1 个答案:

答案 0 :(得分:1)

我相信这是可以使用Modernizr javascript库解决的问题,该库用于HTML5和CSS3中的功能检测。

Modernizr通过在对页面加载可用功能进行快速测试后向您页面的HTML元素添加类来实现此目的。

特别针对您的自动播放问题,我相信此示例http://codepen.io/davidgenetic/pen/FmHaD演示了如何实现检测。需要的javascript在下面。

Modernizr.addTest('autoplay', function(){

    // Audio file data URIs from comments in
    // [this gist](https://gist.github.com/westonruter/253174)
    // via [mudcube](https://github.com/mudcube)
    var mp3 = 'somesong.mp3';

    try {
        var audio = new Audio();
        var src = audio.canPlayType('audio/ogg') ? ogg : mp3;
        audio.autoplay = true;
        audio.volume = 0;

        // this will only be triggered if autoplay works
        audio.addEventListener('play', function() {
            Modernizr.autoplay = true;
          // is there a better way to re-evaluate the html classes added by Modernizr?
          var root = document.getElementsByTagName('html')[0];
          root.classList.remove('no-autoplay');
          root.classList.add('autoplay');

          // or if you're using jQuery:
          // $('html').toggleClass('no-autoplay autoplay');
        }, false);

        audio.src = src;
    } catch(e) {
        console.log('[AUTOPLAY-ERROR]', e);
    }

    return false;
});