iOS设备的微信浏览器受微信浏览器限制,无法自动播放,解决方案如下
iOS设备+微信浏览器
- 一定要监听WeixinJSBridgeReady事件
- 一定要调用video.load();强制加载
- 之后如果要保持在第一帧:video.currentTime = 1;
- 如果要播放就play,暂停就pause,一切正常了
- 实测加载完毕只有canplay事件可以正常监听
代码如下:
// 微信浏览器无需点击自动播放
document.addEventListener('WeixinJSBridgeReady', function () {
// 微信环境专用事件,确保桥接就绪
video.load();
video.addEventListener('canplay', function onCanPlay() {
video.currentTime = 1;
});
});
iOS设备+Safari
// 兼容原生浏览器
video.addEventListener('canplay', function onCanPlay() {
video.currentTime = 1;
video.pause();
});
和原生浏览器处理方式一致
可选但不一定有用的属性
playsinline
webkit-playsinline
x5-playsinline
x5-video-player-type="h5-page"
完整生效代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<style>
body {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
</style>
<video
id="myVideo"
style="height: 100%; width: 100%;background-color: blue; cursor: pointer;"
src="test.mp4#t=0.001"
autoplay
</video>
<script>
const video = document.getElementById('myVideo');
// // 点击播放/暂停
video.addEventListener('click', function() {
if (video.paused) {
video.play();
} else {
video.pause();
}
});
// 微信浏览器无需点击自动播放
document.addEventListener('WeixinJSBridgeReady', function () {
// 微信环境专用事件,确保桥接就绪
video.load();
video.addEventListener('canplay', function onCanPlay() {
video.currentTime = 1;
});
});
// 兼容原生浏览器
video.addEventListener('canplay', function onCanPlay() {
video.currentTime = 1;
video.pause();
});
</script>
</body>
</html>
Vue环境
有一个致命问题,WeixinJSBridgeReady是一次性事件,html可以捕获到,但是等到Vue挂载上去,这个事件早就调用结束了,所以是永远监听不到的
这种情况可以借助WeixinJSBridge的方法去曲线救国,在回调函数里写入自己的业务(如我这个是强制加载视频)
onMounted(()=>{
WeixinJSBridge.invoke( "getNetworkType", {},
() => {
video.load();
video.play();
}
);
})