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