uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常
uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常
示例代码:
<video
id="myVideo"
:src="videoInfo.url"
style="width: 100%; height: 700rpx"
:initial-time="initialTime"
:duration="videoInfo.videoAllTime"
:enable-progress-gesture="false"
:show-fullscreen-btn="false"
@play="handlePlay"
@pause="onPause"
@ended="onEnded"
@timeupdate="onTimeUpdate"
@waiting="onWaiting"
[@loadedmetadata](/user/loadedmetadata)="onLoadedmetadata"
@error="onError"
>
</video>
操作步骤:
- 从A页面获取数据,如url,视频初始播放位置,然后跳转B页面进行视频播放,并且定位到指定位置
预期结果:
- 视频定位至指定位置播放,并且会执行
[@loadedmetadata](/user/loadedmetadata)事件
实际结果:
- 不会从指定位置播放(还是从0开始),并且首次
[@loadedmetadata](/user/loadedmetadata)事件不会执行(第二次会执行)
bug描述:
- video中的
initial-time属性在微信ios H5中不生效,并且[@loadedmetadata](/user/loadedmetadata)事件首次不会执行
更多关于uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app中video组件的initial-time属性在微信ios H5不生效,且@loadedmetadata事件首次不执行,Android和PC浏览器均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中,video 组件的 initial-time 属性在微信 iOS H5 环境下不生效,并且 @loadedmetadata 事件首次不执行,这可能是由于微信 iOS 环境的特殊处理导致的。以下是一些可能的解决方案和排查步骤:
1. 检查微信 iOS 环境下的兼容性
微信 iOS 环境对 H5 的支持可能存在一些限制或特殊处理,尤其是在视频播放方面。可以尝试以下方法:
- 使用
controls属性:确保video组件的controls属性为true,以便用户可以手动控制视频播放。 - 使用
autoplay属性:尝试添加autoplay属性,确保视频自动播放,可能会触发@loadedmetadata事件。 - 使用
src动态赋值:尝试在mounted或onReady生命周期中动态设置src,以确保视频资源加载完成。
2. 使用 @ready 事件代替 @loadedmetadata
如果 @loadedmetadata 事件在首次不执行,可以尝试使用 @ready 事件,它通常会在视频资源加载完成后触发。
<template>
<video
:src="videoSrc"
:initial-time="initialTime"
controls
@ready="onVideoReady"
></video>
</template>
<script>
export default {
data() {
return {
videoSrc: 'your-video-url.mp4',
initialTime: 10, // 初始时间
};
},
methods: {
onVideoReady(event) {
console.log('Video is ready', event);
// 在这里处理视频准备完成后的逻辑
},
},
};
</script>
3. 动态设置 initial-time
如果 initial-time 属性在 iOS 环境下不生效,可以尝试在 @ready 或 @loadedmetadata 事件中手动设置视频的当前时间。
<template>
<video
:src="videoSrc"
controls
@ready="onVideoReady"
></video>
</template>
<script>
export default {
data() {
return {
videoSrc: 'your-video-url.mp4',
initialTime: 10, // 初始时间
};
},
methods: {
onVideoReady(event) {
console.log('Video is ready', event);
// 手动设置视频的当前时间
event.target.currentTime = this.initialTime;
},
},
};
</script>
4. 使用 wx.createVideoContext 手动控制
在微信小程序环境下,可以使用 wx.createVideoContext 来手动控制视频播放,但在 H5 环境下可能不适用。如果 uni-app 支持微信小程序的 API,可以尝试使用 uni.createVideoContext 来控制视频。
const videoContext = uni.createVideoContext('myVideo', this);
// 在视频准备完成后手动设置时间
videoContext.seek(this.initialTime);
5. 检查微信 iOS 环境的缓存问题
微信 iOS 环境可能存在缓存问题,导致视频资源加载异常。可以尝试在视频 URL 后面添加时间戳或其他随机参数来避免缓存。
this.videoSrc = 'your-video-url.mp4?t=' + Date.now();
6. 使用 uni.getSystemInfo 获取环境信息
可以通过 uni.getSystemInfo 获取当前运行环境,判断是否为微信 iOS 环境,然后针对性地处理。
uni.getSystemInfo({
success(res) {
if (res.platform === 'ios' && res.app === 'WeChat') {
console.log('Running on WeChat iOS');
// 针对微信 iOS 环境的特殊处理
}
},
});
7. 使用 video 组件的 seek 方法
在 @ready 或 @loadedmetadata 事件中,使用 video 组件的 seek 方法手动跳转到指定时间点。
onVideoReady(event) {
const video = event.target;
video.seek(this.initialTime);
}

