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

27 回复

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: 测试代码在楼下,就新建的默认项目

回复 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.postMessageuni.onMessage

uni-app 提供了 uni.postMessageuni.onMessage 方法来实现 webviewnvue 页面之间的通信。

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.$emituni.$on

uni-app 提供了全局事件总线 uni.$emituni.$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!' });
回到顶部