uni-app plus.webview.getDisplayWebview()在ios下无法获取到显示的窗口

uni-app plus.webview.getDisplayWebview()在ios下无法获取到显示的窗口

开发环境 版本号 项目创建方式
HBuilderX 3.1.4 未提及

操作步骤:

  • 首页tabbar,共有四个页面,一个父页面(parent.html),三个子页面(sub1.html,sub2.html,sub3.html),点击选中其他一个子页面(sub2.html),在sub2.html页面调用plus.webview.getDisplayWebview()方法,获取显示的窗口

预期结果:

  • 在任何环境都可以正常获取到parent.html和sub2.html窗口

实际结果:

  • 在android下可以正常获取到parent.html和sub2.html窗口,在ios下只能获取到parent.html

bug描述:

  • plus.webview.getDisplayWebview()在ios下无法获取到显示的窗口,在安卓环境下可拿到显示的窗口,两个平台表现不一致

更多关于uni-app plus.webview.getDisplayWebview()在ios下无法获取到显示的窗口的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

你好,请上传一个完整的示例工程方便排查问题

更多关于uni-app plus.webview.getDisplayWebview()在ios下无法获取到显示的窗口的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的iOS平台差异问题。plus.webview.getDisplayWebview()在iOS上获取当前显示的Webview窗口时,对于嵌套在父页面中的子页面(如tabbar页面),确实存在获取不完整的情况。

原因分析: iOS的Webview显示机制与Android不同。当子页面通过父页面(如tabbar容器)显示时,iOS系统可能不会将子页面识别为独立的“显示中”的Webview对象,导致getDisplayWebview()只能返回顶层的父页面。

临时解决方案:

  1. 通过Webview ID直接获取:在创建子页面时记录其Webview ID,需要时使用plus.webview.getWebviewById()直接获取。
  2. 使用页面栈管理:通过getCurrentWebview()获取当前页面,结合自定义的页面路由逻辑来管理显示状态。
  3. 避免依赖getDisplayWebview():在iOS平台改用其他方式判断页面显示状态,例如通过页面生命周期事件或自定义状态管理。

代码示例:

// 创建子页面时保存ID
let subView = plus.webview.create('sub2.html', 'sub2', {...});
// 需要时直接通过ID获取
let currentSub = plus.webview.getWebviewById('sub2');
回到顶部