我正在得到错误信息..
DOMException: play()失败,因为用户没有首先与文档交互。
..当使用Chrome 66版本在桌面上播放视频时。
我确实发现一个广告开始自动播放在一个网站上,但使用以下HTML:
<video
title="Advertisement"
webkit-playsinline="true"
playsinline="true"
style="background-color: rgb(0, 0, 0); position: absolute; width: 640px; height: 360px;"
src="http://ds.serving-sys.com/BurstingRes/Site-2500/Type-16/1ff26f6a-aa27-4b30-a264-df2173c79623.mp4"
autoplay=""></video>
那么,绕过Chrome v66的自动播放拦截器真的像添加webkit-playsinline="true", playsinline="true"和autoplay=""属性<video>元素一样简单吗?这有什么负面影响吗?
我得到了这个错误
DOMException: play()失败,因为用户没有首先与文档交互。
下面是我在Angular项目中所做的
关键点:永远不要假设视频会播放,当视频没有真正播放时,不要显示暂停按钮。
你应该总是查看play函数返回的Promise,看看它是否被拒绝了:
ngOnInit(): void{
this.ensureVideoPlays();
}
private ensureVideoPlays(): void{
const video = document.querySelector("video");
if(!video) return;
const promise = video.play();
if(promise !== undefined){
promise.then(() => {
// Autoplay started
}).catch(error => {
// Autoplay was prevented.
video.muted = true;
video.play();
});
}
}
来源:自动播放策略
在chrome 66更新后,要使html 5元素自动播放,您只需要将静音属性添加到视频元素。
现在的视频HTML
<视频
title =“广告”
webkit-playsinline = " true "
playsinline = " true "
Style ="background-color: rgb(0,0,0); "位置:绝对的;宽度:640 px;身高:360 px;“
src = " http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 "
视频播放= " " > < / >
只需要静音="静音"
<视频
title =“广告”
Style ="background-color: rgb(0,0,0); "位置:绝对的;宽度:640 px;身高:360 px;“
src = " http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 "
播放= " true "
沉默= "低调" > < /视频>
我相信chrome 66的更新是为了阻止标签在用户标签上产生随机噪音。这就是为什么静音属性使自动播放再次工作。