uni-app IOS的webview内嵌页面uni.postMessage,无法在app端接收到消息

uni-app IOS的webview内嵌页面uni.postMessage,无法在app端接收到消息

开发环境 版本号 项目创建方式
Mac macOS Big Sur 11.2.3 HBuilderX

操作步骤:

  • 使用create方式创建webview,plus.globalEvent.addEventListener(‘plusMessage’, function() {…})监听webview内部的消息
  • 内嵌页面中通过uni.postMessage()回传消息
  • 运行时会抛出错误,且app端没有收到回传消息
    [ERROR] : TypeError: undefined is not an object (evaluating 'window.plus._plusready_dispatch')
    

更多关于uni-app IOS的webview内嵌页面uni.postMessage,无法在app端接收到消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

大家有什么思路吗?有什么想法都可以交流一下,谢谢!!!!

更多关于uni-app IOS的webview内嵌页面uni.postMessage,无法在app端接收到消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html


像5+html 和原生H5页面中的弹窗plus冲突了的话,大家一般是怎么处理的呢?

可以自己顶顶吗。。。唉。。。调试了好久了还是没找到绕过方案

TypeError: undefined is not an object (evaluating ‘window.plus._plusready_dispatch’)

可以使用其他通信方式,比如 overrideUrlLoading 相关参考:https://github.com/zhetengbiji/plus-websocket/blob/master/src/SocketTask.ts

我试了这个方法,拦截超链接跳转的时候,get的传参长度是有限制的,而业务需求的传参即使压缩之后也远远超过了最大长度限制。请问还有什么绕过方案吗?

回复 伊卡28: 分段

这是一个典型的iOS平台webview通信问题。在uni-app中,iOS webview与宿主App之间的通信机制与Android有所不同。

主要问题在于iOS平台下,webview内的window.plus对象初始化时机问题。当webview页面加载时,如果plus环境尚未完全就绪就调用uni.postMessage(),会导致window.plus._plusready_dispatch未定义错误。

解决方案:

  1. 等待plus环境就绪:在webview页面中,确保在plus环境准备好后再调用postMessage
document.addEventListener('plusready', function() {
    // 此时可以安全调用uni.postMessage()
    uni.postMessage({ data: 'your data' });
}, false);
  1. 添加错误处理:在监听端添加更健壮的错误处理
plus.globalEvent.addEventListener('plusMessage', function(e) {
    console.log('收到消息:', e.data);
}, function(error) {
    console.error('监听失败:', error);
});
  1. 检查webview创建配置:确保webview创建时启用了JavaScript
const wv = plus.webview.create(url, id, {
    javascript: true // 必须启用
});
回到顶部