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
大家有什么思路吗?有什么想法都可以交流一下,谢谢!!!!
更多关于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的传参长度是有限制的,而业务需求的传参即使压缩之后也远远超过了最大长度限制。请问还有什么绕过方案吗?
这是一个典型的iOS平台webview通信问题。在uni-app中,iOS webview与宿主App之间的通信机制与Android有所不同。
主要问题在于iOS平台下,webview内的window.plus
对象初始化时机问题。当webview页面加载时,如果plus环境尚未完全就绪就调用uni.postMessage()
,会导致window.plus._plusready_dispatch
未定义错误。
解决方案:
- 等待plus环境就绪:在webview页面中,确保在plus环境准备好后再调用postMessage
document.addEventListener('plusready', function() {
// 此时可以安全调用uni.postMessage()
uni.postMessage({ data: 'your data' });
}, false);
- 添加错误处理:在监听端添加更健壮的错误处理
plus.globalEvent.addEventListener('plusMessage', function(e) {
console.log('收到消息:', e.data);
}, function(error) {
console.error('监听失败:', error);
});
- 检查webview创建配置:确保webview创建时启用了JavaScript
const wv = plus.webview.create(url, id, {
javascript: true // 必须启用
});