HTML 5video自动播放function检测

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

例如,在Chrome中的桌面上,它不是,但在Android上。

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

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

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

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

Modernizr通过在页面加载中运行快速testingfunction之后,通过向页面的HTML元素添加类来实现此目的。

特别是对于你的问题AutoPlay,我相信这个例子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; });