uni-app打包为h5后,在另一个app中使用web-view嵌套时,web-view中的@message事件接收不到消息

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app打包为h5后,在另一个app中使用web-view嵌套时,web-view中的@message事件接收不到消息

p h5发送:

window.postMessage({
data: {
action: 'back'
}
},
'*')
uni.navigateBack()

app内web-view接收message:

<web-view [@message](/user/message)="getMessage"></web-view>
methods: {
getMessage(e){
console.log(e,"[b]");
uni.navigateBack()
}
}
开发环境 版本号 项目创建方式

1 回复

在解决uni-app打包为H5后在另一个APP中使用web-view嵌套时@message事件接收不到消息的问题时,我们需要确保几个关键点:

  1. 确保uni-app H5页面正确发送消息:在uni-app中,你可以使用window.postMessage来发送消息到父页面。

  2. 确保web-view组件正确配置并接收消息:在嵌套uni-app H5页面的APP中,确保web-view组件能够监听并处理@message事件。

以下是一个简化的代码示例,展示了如何在uni-app中发送消息以及在APP的web-view中接收消息。

uni-app 发送消息的代码

在uni-app的某个页面中,比如index.vue,你可以添加如下代码来发送消息:

<template>
  <view>
    <button @click="sendMessage">发送消息到父页面</button>
  </view>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      try {
        const message = {
          type: 'GREETING',
          text: 'Hello from uni-app!'
        };
        window.parent.postMessage(JSON.stringify(message), '*');
      } catch (error) {
        console.error('发送消息失败:', error);
      }
    }
  }
}
</script>

APP中web-view接收消息的代码

假设你在一个使用Vue.js或类似框架的APP中,你的web-view组件可能看起来像这样:

<template>
  <view>
    <web-view :src="webViewUrl" @message="handleMessage"></web-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      webViewUrl: 'https://your-uni-app-h5-url.com'
    };
  },
  methods: {
    handleMessage(event) {
      try {
        const message = JSON.parse(event.detail.data);
        console.log('接收到的消息:', message);
        if (message.type === 'GREETING') {
          alert(`Received: ${message.text}`);
        }
      } catch (error) {
        console.error('处理消息失败:', error);
      }
    }
  }
}
</script>

注意事项

  1. 安全性window.parent.postMessage的第二个参数是目标源(targetOrigin),在上面的示例中使用了'*',这意味着消息可以被任何来源接收。在实际应用中,你应该限制为特定的源以提高安全性。

  2. 跨域问题:如果web-view加载的页面和APP不在同一个域下,可能会遇到跨域问题。确保你的服务器配置允许跨域通信。

  3. 调试:使用浏览器的开发者工具调试web-view中的内容,确保消息正确发送和接收。

通过上述代码和注意事项,你应该能够解决uni-app打包为H5后在另一个APP中使用web-view嵌套时@message事件接收不到消息的问题。

回到顶部