uni-app vue3下nvue页面使用plus.webview.create创建网页后,网页中uni.postMessage会触发报错
uni-app vue3下nvue页面使用plus.webview.create创建网页后,网页中uni.postMessage会触发报错
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC版本号 | 11 |
HBuilderX | 正式 |
HBuilderX版本号 | 4.15 |
手机系统 | Android |
手机系统版本号 | Android 12 |
手机厂商 | 模拟器 |
手机机型 | 雷电 |
页面类型 | nvue |
Vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
操作步骤:
- 打开运行,点击测试按钮就报错
预期结果:
- 打开运行,点击测试按钮正常支持,nvue正常接收到数据
实际结果:
- 打开运行,点击测试按钮就报错
bug描述:
- vue3下nvue页面使用plus.webview.create创建网页后,网页中uni.postMessage和uni.webView.postMessage都会触发报错,代码执行不下去,nvue页面的plus.globalEvent.addEventListener('plusMessage’也不会执行,以下是代码示例,
更多关于uni-app vue3下nvue页面使用plus.webview.create创建网页后,网页中uni.postMessage会触发报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app vue3下nvue页面使用plus.webview.create创建网页后,网页中uni.postMessage会触发报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app
的 nvue
页面中,使用 plus.webview.create
创建网页后,如果在网页中使用 uni.postMessage
进行通信,可能会触发报错。这是因为 nvue
页面和 webview
页面之间的通信机制与普通的 vue
页面有所不同。
问题原因
在 nvue
页面中,uni.postMessage
是用于与 webview
页面进行通信的,但 nvue
页面本身并不是一个标准的 webview
,因此可能会出现通信失败或报错的情况。
解决方法
为了避免这个问题,你可以通过以下方式来处理 nvue
页面与 webview
页面之间的通信:
-
使用
evalJS
方法进行通信: 你可以在nvue
页面中使用evalJS
方法向webview
页面发送消息,而不是直接使用uni.postMessage
。// 在 nvue 页面中 const webview = plus.webview.create('https://example.com'); webview.evalJS("window.postMessage({type: 'message', data: 'Hello from nvue'}, '*')");
在
webview
页面中,你可以通过监听message
事件来接收消息:window.addEventListener('message', function(event) { if (event.data.type === 'message') { console.log('Received message:', event.data.data); } });
-
使用
plus.webview.postMessage
: 你可以使用plus.webview.postMessage
方法来进行通信,而不是uni.postMessage
。// 在 nvue 页面中 const webview = plus.webview.create('https://example.com'); webview.postMessage({ type: 'message', data: 'Hello from nvue' });
在
webview
页面中,你可以通过监听plusMessage
事件来接收消息:window.addEventListener('plusMessage', function(event) { if (event.data.type === 'message') { console.log('Received message:', event.data.data); } });
-
使用
uni-app
的web-view
组件: 如果可能的话,建议使用uni-app
提供的web-view
组件来加载网页,而不是直接使用plus.webview.create
。web-view
组件与uni-app
的通信机制更加兼容,可以避免一些潜在的问题。<template> <web-view src="https://example.com" @message="handleMessage"></web-view> </template> <script> export default { methods: { handleMessage(event) { console.log('Received message:', event.detail.data); } } } </script>
在
web-view
页面中,你可以使用uni.postMessage
来发送消息:uni.postMessage({ data: { type: 'message', data: 'Hello from web-view' } });