特征检测是否需要用户手势

有没有一种方法来检测是否允许在视频元素上调用play()而无需用户手势? 在Android Chrome浏览器中会发出以下警告:

Failed to execute 'play' on 'HTMLMediaElement': API can only be initiated by a user gesture.

因此,在Chrome Android上,需要用户手势才能开始播放视频,而不是在桌面版Chrome上。 有没有办法来检测我会得到哪些行为?

我想在我的应用程序中具有稍微不同的行为,具体取决于是否允许以编程方式调用播放。

我曾尝试使用Modernizr.videoautoplay ,但它会检查元素上的autoplay属性是否相同。 这给IE11和Edge带来了不利影响。

编辑:添加一个例子。 该视频将在Windows桌面上自动播放,并在Windows 8或10上自动播放IE11或Edge(延迟3秒)。对于Chrome @ Android,需要用户进行交互(单击该按钮),并在控制台中看到错误消息。


play方法返回一个可用于捕获错误的承诺。

并非所有的浏览器都遵循规范,因此您必须先检查返回的内容是否为承诺。

var autoPlayAllowed = true;
var promise = document.createElement("video").play();
if(promise instanceof Promise) {
    promise.catch(function(error) {
        // Check if it is the right error
        if(error.name == "NotAllowedError") {
            autoPlayAllowed = false;
        } else {
            throw error;
        }
    }).then(function() {
        if(autoPlayAllowed) {
            // Allowed
        } else {
            // Not allowed
        }
    });
} else {
    // Unknown if allowed
}
链接地址: http://www.djcxy.com/p/88009.html

上一篇: Feature detect if user gesture is needed

下一篇: Algorithm to find best dimensions combination