Android 视频播放的时候在全屏之后返回上一个页面,有时候发现上个页面不见了!

当在Android设备上播放视频并全屏后返回,有时会发现上一个页面消失。这个问题可以通过在上一个页面的AndroidManifest.xml中添加android:configChanges=“orientation|keyboardHidden|screenSize”来解决。确保播放页面和上一个页面都有相同的配置,问题即可得到修复。

视频播放的时候在全屏之后返回上一个页面,有时候发现上个页面不见了?
解决办法:
播放页面在AndroidManifest.xml中设置了 android:configChanges=“orientation|keyboardHidden|screenSize”
需要在上一个页面同时也要设置 android:configChanges=“orientation|keyboardHidden|screenSize”
到此再次测试该问题已解决!

<think>嗯,用户现在想在uniapp的web-view里实现视频全屏播放时,点击关闭按钮返回上一页的功能。之前他们问过关于监听web-view中video全屏退出的事件,现在需要结合之前的方案来实现返回功能。 首先,我得回忆一下之前的回答。之前提到过通过H5页面和uni-app主应用之间的通信,利用window.uni.postMessage来传递全屏状态的变化。当用户退出全屏时,uni-app端可以捕获这个事件,然后执行相应的操作,比如恢复布局。现在用户的需求是在点击全屏时的关闭按钮后返回上一页,所以需要在这个事件触发时执行页面返回的逻辑。 接下来,我需要确定如何具体实现。根据之前的方案,当H5页面中的video退出全屏时,会发送消息给主应用。这时候,主应用可以调用uni.navigateBack来返回上一页。不过需要注意的是,用户可能是在全屏状态下点击关闭按钮,这时候需要区分是否是退出全屏的事件,并确保只在退出全屏时触发返回。 另外,用户提到的全屏关闭按钮可能是指视频播放器自带的关闭按钮,也可能是自定义的。如果是播放器自带的,比如video.js或者ckplayer,可能需要查阅相关文档,确认如何监听其关闭事件。但根据之前的思路,可能还是通过监听全屏状态变化来实现。 还要考虑平台兼容性,比如iOS和Android的不同表现。之前提到iOS需要使用webkitendfullscreen事件,而Android可以用fullscreenchange。在H5页面中正确监听这些事件是关键,确保在退出全屏时触发消息发送。 然后,用户可能遇到的问题是全屏关闭按钮的事件没有被正确捕获,或者返回上一页的逻辑没有在正确的时机执行。需要确保H5页面准确发送消息,主应用正确处理消息并调用导航返回。 最后,可能需要提供一个备选方案,比如轮询检测全屏状态,以防事件监听不可靠。同时,建议用户使用uni-app的原生video组件,如果可能的话,因为web-view中的视频处理可能会有更多的兼容性问题,而原生组件更容易控制。 总结步骤应该是:H5监听全屏退出事件,发送消息给uni-app,uni-app接收到消息后执行返回操作,并处理可能的兼容性和调试问题。</think>在 uni-app 中实现 WebView 内视频全屏播放点击关闭返回上一页的功能,可通过 **H5事件监听 + uni-app路由控制** 的混合方案实现。以下是具体实现流程: --- ### 一、技术实现方案 #### 1. H5 页面关键代码(需嵌入 WebView) ```html <video id="myVideo" controls></video> <script> const video = document.getElementById('myVideo'); // 监听全屏状态变化(兼容iOS/Android) video.addEventListener('webkitendfullscreen', handleFullscreenChange); video.addEventListener('fullscreenchange', handleFullscreenChange); function handleFullscreenChange() { const isFullscreen = document.fullscreenElement || video.webkitDisplayingFullscreen; // 向uni-app主应用发送状态 if(window.uni && !isFullscreen) { window.uni.postMessage({ data: { action: 'videoExitFullscreen', timestamp: Date.now() } }); } } </script> ``` #### 2. uni-app 主应用逻辑 ```html <!-- 承载H5的页面 --> <template> <web-view :src="h5PageUrl" @message="handleWebviewMessage" @error="onWebviewError" ></web-view> </template> <script> export default { methods: { // 接收H5消息 handleWebviewMessage(e) { const msg = e.detail.data[0]; if(msg.action === 'videoExitFullscreen') { uni.navigateBack({ delta: 1 }); // 返回上一页 } }, // WebView错误处理 onWebviewError(err) { console.error('WebView加载异常:', err); } } } </script> ``` --- ### 二、平台特殊处理 | 平台 | 关键配置 | |-----------|------------------------------------------------------------------------| | **iOS** | 需在 `manifest.json` 添加 `"fullscreen": false` 防止系统级全屏冲突[^1] | | **Android** | 配置硬件加速提升视频性能:<br>`android:hardwareAccelerated="true"` (AndroidManifest.xml) | | **微信小程序** | 需在 `web-view` 配置业务域名白名单 | --- ### 三、优化建议 #### 1. 防抖处理(避免多次触发) ```javascript let lastTriggerTime = 0; function handleFullscreenChange() { if(Date.now() - lastTriggerTime < 1000) return; lastTriggerTime = Date.now(); //...原有逻辑 } ``` #### 2. 备用检测方案(事件不可靠时) ```javascript // H5页面增加定时器检测 setInterval(() => { const isFullscreen = !!document.fullscreenElement; if(!isFullscreen && window.uni) { window.uni.postMessage({ data: { action: 'forceCheckExit' } }); } }, 800); ``` --- ### 四、替代方案推荐 若 WebView 方案存在兼容性问题,建议改用 **uni-app原生视频组件**: ```html <video id="myVideo" :src="videoUrl" @fullscreenchange="handleNativeFullscreen" ></video> <script> export default { methods: { handleNativeFullscreen(e) { if(!e.detail.fullScreen) { uni.navigateBack(); // 退出全屏立即返回 } } } } </script> ``` **优势**:无需跨WebView通信,兼容性更好 --- ### 五、调试技巧 1. **iOS调试**:使用Safari开发者工具远程调试WKWebView 2. **Android调试**:Chrome的 `chrome://inspect` 调试WebView 3. **真机日志**:通过 `uni.getLogManager()` 捕获边界情况 --- 通过上述方案,可精准实现「全屏关闭即返回」的交互效果。若需处理更复杂的视频控制场景,建议结合 `uni.createVideoContext` 实现原生级控制[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值