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' } });

