Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 功能检测是否需要用户手势_Javascript_Html5 Video_Modernizr_Feature Detection - Fatal编程技术网

Javascript 功能检测是否需要用户手势

Javascript 功能检测是否需要用户手势,javascript,html5-video,modernizr,feature-detection,Javascript,Html5 Video,Modernizr,Feature Detection,有没有办法检测在没有用户手势的情况下是否允许对视频元素调用play()? 在Android Chrome上,会发出以下警告: 未能对“HTMLMEDIALEMENT”执行“播放”:只能通过用户手势启动API。 因此,在Chrome Android上,启动视频播放需要用户手势,而桌面Chrome上则不需要。 有没有一种方法可以检测出我会出现哪种行为 我希望在我的应用程序中有稍微不同的行为,这取决于是否允许通过编程方式调用play 我曾尝试使用modernizer.videoautoplay,但这会

有没有办法检测在没有用户手势的情况下是否允许对视频元素调用
play()
? 在Android Chrome上,会发出以下警告:

未能对“HTMLMEDIALEMENT”执行“播放”:只能通过用户手势启动API。

因此,在Chrome Android上,启动视频播放需要用户手势,而桌面Chrome上则不需要。 有没有一种方法可以检测出我会出现哪种行为

我希望在我的应用程序中有稍微不同的行为,这取决于是否允许通过编程方式调用play

我曾尝试使用
modernizer.videoautoplay
,但这会检查元素上的
autoplay
属性是否相同。这为IE11和Edge提供了假阴性


编辑:添加。该视频将在Chrome桌面和IE11或windows 8或10上的Edge(延迟3秒)中自动开始播放。对于Chrome@Android需要用户交互(单击按钮),并且可以在控制台中看到错误消息。

播放方法返回一个承诺,可用于捕获错误

并不是所有的浏览器都会这样做,所以您必须首先检查返回的内容是否是承诺

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
}

你能发布一个有这个错误的代码示例吗?嗨@Patrick,我已经用一个示例的链接更新了这个问题。这有点复杂(一点一点地向视频添加帧),但问题可以在nhi@oskbor看到,你对此有解决方案吗?没有,没有找到检测方法,我只是过滤了var isMobile=false;如果(/android | webos | iphone | ipad | ipod | blackberry | iemobile | opera mini/i.test(navigator.userAgent.toLowerCase())|(/Mobi/i.test(navigator.userAgent.toLowerCase())isMobile=true;我认为这需要首先检查window.Promise是否存在,否则在不支持promises的浏览器上会出现引用错误。这在Chrome 70上不起作用。如果视频元素上没有设置源,承诺将挂起并且无法解决。