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上不起作用。如果视频元素上没有设置源,承诺将挂起并且无法解决。