uni-app vue3 nvue webview无法向应用传递信息
uni-app vue3 nvue webview无法向应用传递信息
| 项目信息 | 详情 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC系统版本 | win10 |
| HBuilderX | Alpha |
| HBuilderX版本 | 3.4.9 |
| 手机系统 | Android |
| 手机版本 | Android 12 |
| 手机厂商 | 华为 |
| 手机型号 | mate40pro |
| 页面类型 | nvue |
| Vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
操作步骤:
<web-view class="lime-svga__canvas" @onPostMessage="onMessage" src="hybrid/html/index.html"></web-view>
onMessage(e) {
console.log('e')
}
预期结果:
正常接收
实际结果:
无法接收
bug描述:
vue3 nvue 的webview无法向应用传递信息,vue2没有问题。
更多关于uni-app vue3 nvue webview无法向应用传递信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html
ios还是android ,上传可以复现的demo,方便排查
更多关于uni-app vue3 nvue webview无法向应用传递信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html
您好啥时候修复呢,我这边项目急得很急得很。
Bug已确认
请问如何确认之后哪个版本修复了这个bug, 是通过更新日志吗
您好啥时候修复呢,我这边项目急得很急得很。
您好啥时候修复呢,我这边项目急得很急得很。
啥时候能解决啊
您好啥时候修复呢,我这边项目急得很急得很。
一个月了,,,,快点啊。啥时候修复呢,我这边项目急得很急得很。
关注的第3天,,,,快点啊。啥时候修复呢,我这边项目急得很急得很。
不用解决了,已经转战flutter。uniapp的bug多的官方一个bug改了N久都搞不定。
什么时候才能修复
预计下次发版生效
HBuilder X 3.5.1-alpha已修复
为什么我还是传不了消息,vue3
并没有修复!
HBuilder X 3.5.2.20220719-alpha 依旧不行
回复 g***@163.com: 提供测试代码
回复 DCloud_uni-ad_HDX: 我代码已经提供了,是我写的有问题还是说没修复?
测试代码在这,就新建一个默认项目,然后塞一个html。版本号3.5.2.20220719-alpha
回复 m***@163.com: 你可以试试,或许我的代码有问题呢。
3.5.3.20220727-alpha 已修复
3.5.3.20220727-alpha 已修复
我的版本3.6.4,@onPostMessage还是没用。
提供一个简单的测试工程
在 uni-app 中使用 nvue 页面时,webview 组件与 vue 页面之间的通信可能会遇到一些问题,尤其是在 vue3 中。以下是一些可能的解决方案和注意事项:
1. 使用 uni.postMessage 和 uni.onMessage
uni-app 提供了 uni.postMessage 和 uni.onMessage 方法来实现 webview 与 nvue 页面之间的通信。
在 webview 中发送消息:
// 在 webview 页面中
uni.postMessage({
data: {
message: 'Hello from webview!'
}
});
在 nvue 页面中接收消息:
// 在 nvue 页面中
uni.onMessage((message) => {
console.log('Received message from webview:', message);
});
2. 使用 evalJS 方法
webview 组件提供了 evalJS 方法,可以在 nvue 页面中执行 webview 中的 JavaScript 代码。
在 nvue 页面中执行 webview 中的代码:
// 在 nvue 页面中
const webview = this.$refs.webview;
webview.evalJS("window.postMessage('Hello from nvue!', '*')");
在 webview 中监听消息:
// 在 webview 页面中
window.addEventListener('message', (event) => {
console.log('Received message from nvue:', event.data);
});
3. 使用 uni.$emit 和 uni.$on
uni-app 提供了全局事件总线 uni.$emit 和 uni.$on,可以在不同页面之间传递消息。
在 webview 中发送事件:
// 在 webview 页面中
uni.$emit('webviewMessage', { message: 'Hello from webview!' });
在 nvue 页面中监听事件:
// 在 nvue 页面中
uni.$on('webviewMessage', (message) => {
console.log('Received message from webview:', message);
});
4. 使用 uni.getEnv 判断环境
在 nvue 页面中,可以使用 uni.getEnv 方法来判断当前环境,并根据环境执行不同的逻辑。
// 在 nvue 页面中
const env = uni.getEnv();
if (env === 'webview') {
// 执行 webview 相关逻辑
} else {
// 执行 nvue 相关逻辑
}
5. 使用 uni.webView 对象
uni-app 提供了 uni.webView 对象,可以直接操作 webview。
在 nvue 页面中获取 webview 对象:
// 在 nvue 页面中
const webview = uni.webView;
webview.postMessage({ message: 'Hello from nvue!' });
在 webview 中监听消息:
// 在 webview 页面中
window.addEventListener('message', (event) => {
console.log('Received message from nvue:', event.data);
});
6. 使用 uni.requireNativePlugin
如果以上方法都无法满足需求,可以尝试使用 uni.requireNativePlugin 来调用原生插件,实现更复杂的通信逻辑。
// 在 nvue 页面中
const nativePlugin = uni.requireNativePlugin('YourNativePlugin');
nativePlugin.someMethod({ message: 'Hello from nvue!' });


