【问题标题】:HTML 5 Video Auto Play Feature detectionHTML 5 视频自动播放功能检测
【发布时间】:2014-11-13 23:05:21
【问题描述】:

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

例如,在 chrome 中的桌面上不会,但在 Android 上会。

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

我真的想避免浏览器/平台通过用户代理嗅探,并且想要一些更类似于特征检测的东西。

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

【问题讨论】:

    标签: javascript android ios html video


    【解决方案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;
    });
    

    【讨论】:

    • 有趣的解决方案。我可能会使用视频元素编写类似的测试。在这一点上,我不确定等待加载视频文件(无论多么小)来确定这一点是否值得额外开销,但它回答了这个问题,非常感谢!
    • 查看stackoverflow.com/questions/5472938/… 了解有关 IE 的控制台问题;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多