Javascript 适用于平板电脑/手机的视频自动播放嗅探器;canPlayType“;不适用

Javascript 适用于平板电脑/手机的视频自动播放嗅探器;canPlayType“;不适用,javascript,css,html,video,sniffer,Javascript,Css,Html,Video,Sniffer,我想找出不支持视频自动播放的平台(手机、平板电脑)。有可靠的方法可以做到这一点吗?到目前为止,我唯一的选择似乎是一个完整的用户代理嗅探器 相关:对于嗅探手持设备而言,横向或纵向@media查询是否可靠?我可以想象,如果一个设备返回“横向”或“纵向”,那么它很可能是一个手持设备,因此不太可能支持自动播放 感谢您加入本次讨论 横向或纵向查询只能真正告诉您浏览器窗口的纵横比,因此不可靠 理论上,掌上电脑媒体查询将对当前浏览器做出正确响应,在媒体查询中它似乎可以正常工作 <style> @

我想找出不支持视频自动播放的平台(手机、平板电脑)。有可靠的方法可以做到这一点吗?到目前为止,我唯一的选择似乎是一个完整的用户代理嗅探器

相关:对于嗅探手持设备而言,横向或纵向@media查询是否可靠?我可以想象,如果一个设备返回“横向”或“纵向”,那么它很可能是一个手持设备,因此不太可能支持自动播放


感谢您加入本次讨论

横向或纵向查询只能真正告诉您浏览器窗口的纵横比,因此不可靠

理论上,
掌上电脑
媒体查询将对当前浏览器做出正确响应,在媒体查询中它似乎可以正常工作

<style> 
@media handheld only { body { background: #00ff00};}
</style>
所以。。。B计划的时间到了

我能想到的唯一可靠测试方法是尝试自动播放,同时触发计时器。。。如果计时器触发时视频没有开始播放,则假定它不能。这不是一个优雅的解决方案(而且需要一些捏造来让计时器正确地考虑视频/缓冲等的大小),而且您可能希望对结果进行cookie处理,这样您就不必在后续访问中浪费启动时间

在这个示例中,我使用了.5s延迟,并对照
标记上的
进度
事件进行检查。。。根据您的场景和视频大小等,您可能需要进行实验。在iPad、Nexus7、Nexus4和Kindle HDX上进行了测试,结果似乎相当可靠

<video id="videoPlayer" autoplay controls>
    <source src="Video.mp4" type="video/mp4">
</video>

<script>
var playing = false
var waitAndSee = 500; // this allows 0.5s for the video to show progress

var video = document.getElementById('videoPlayer');
video.addEventListener('progress',function(e){
    playing = true
}); 

var counter=setTimeout ( "didItStart()", waitAndSee );

function didItStart() { 
    clearTimeout(counter);
    if (playing) {
    document.write("it started")
    } else {
    document.write("it didn't")
    }
}

</script> 

var=false
var waitAndSee=500;//这允许视频显示0.5秒的进度
var video=document.getElementById('videoPlayer');
video.addEventListener('progress',函数(e){
玩=真
}); 
var counter=setTimeout(“didItStart()”,waitAndSee);
函数didItStart(){
清除超时(计数器);
如果(玩){
document.write(“它开始了”)
}否则{
文档。写入(“它没有”)
}
}

横向或纵向查询只会告诉您浏览器窗口的纵横比,因此不可靠

理论上,
掌上电脑
媒体查询将对当前浏览器做出正确响应,在媒体查询中它似乎可以正常工作

<style> 
@media handheld only { body { background: #00ff00};}
</style>
所以。。。B计划的时间到了

我能想到的唯一可靠测试方法是尝试自动播放,同时触发计时器。。。如果计时器触发时视频没有开始播放,则假定它不能。这不是一个优雅的解决方案(而且需要一些捏造来让计时器正确地考虑视频/缓冲等的大小),而且您可能希望对结果进行cookie处理,这样您就不必在后续访问中浪费启动时间

在这个示例中,我使用了.5s延迟,并对照
标记上的
进度
事件进行检查。。。根据您的场景和视频大小等,您可能需要进行实验。在iPad、Nexus7、Nexus4和Kindle HDX上进行了测试,结果似乎相当可靠

<video id="videoPlayer" autoplay controls>
    <source src="Video.mp4" type="video/mp4">
</video>

<script>
var playing = false
var waitAndSee = 500; // this allows 0.5s for the video to show progress

var video = document.getElementById('videoPlayer');
video.addEventListener('progress',function(e){
    playing = true
}); 

var counter=setTimeout ( "didItStart()", waitAndSee );

function didItStart() { 
    clearTimeout(counter);
    if (playing) {
    document.write("it started")
    } else {
    document.write("it didn't")
    }
}

</script> 

var=false
var waitAndSee=500;//这允许视频显示0.5秒的进度
var video=document.getElementById('videoPlayer');
video.addEventListener('progress',函数(e){
玩=真
}); 
var counter=setTimeout(“didItStart()”,waitAndSee);
函数didItStart(){
清除超时(计数器);
如果(玩){
document.write(“它开始了”)
}否则{
文档。写入(“它没有”)
}
}

感谢您的全面回复-我甚至不知道有“手持”媒体查询!我会做一些测试,考虑到你的发现,它并不总是有效的。。。关于“横向”和“纵向”,你是说桌面浏览器总是返回“横向”吗?我假设只有手持设备返回该值,但我可以看出我是错的。感谢您的全面回复-我甚至不知道有“手持”媒体查询!我会做一些测试,考虑到你的发现,它并不总是有效的。。。关于“横向”和“纵向”,你是说桌面浏览器总是返回“横向”吗?我以为只有手持设备返回了那个值,但我知道我错了。