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

1 回复

更多关于uni-app vue3下nvue页面使用plus.webview.create创建网页后,网页中uni.postMessage会触发报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-appnvue 页面中,使用 plus.webview.create 创建网页后,如果在网页中使用 uni.postMessage 进行通信,可能会触发报错。这是因为 nvue 页面和 webview 页面之间的通信机制与普通的 vue 页面有所不同。

问题原因

nvue 页面中,uni.postMessage 是用于与 webview 页面进行通信的,但 nvue 页面本身并不是一个标准的 webview,因此可能会出现通信失败或报错的情况。

解决方法

为了避免这个问题,你可以通过以下方式来处理 nvue 页面与 webview 页面之间的通信:

  1. 使用 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);
        }
    });
    
  2. 使用 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);
        }
    });
    
  3. 使用 uni-appweb-view 组件: 如果可能的话,建议使用 uni-app 提供的 web-view 组件来加载网页,而不是直接使用 plus.webview.createweb-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'
        }
    });
回到顶部