uni-app 中 web-view 组件嵌入 h5 页面,h5 如何向 web-view 发送消息

本文介绍了在移动端Vue框架的H5页面与UniAppweb-view组件间通信的两种方法:使用window.postMessage进行跨域通信和uni.webviewAPI。通过比较,发现uni.webview更为适用,推荐方案二解决H5向web-view发送和接收消息的问题。
摘要由CSDN通过智能技术生成

背景

移动端项目是 vue 框架写的 h5 页面,然后 uni-app 的项目中使用 web-view 组件通过 src 指向 h5 页面,现在需要从 h5 页面发送消息,由 web-view 组件接收消息。

一、使用 postMessage

1.在 H5 页面中发送消息

window.parent.postMessage({
  data: {
    message: 'Hello from H5'
  }
}, '*');

第二个参数需要指定为’*',表示任意域名都可以接收到消息。

2.在 UniApp 的 web-view 页面中接收消息

<template>
  <view>
    <web-view src="/hybrid/html/index.html" @message="handleMessage"></web-view>
  </view>
</template>

<script>
export default {
  methods: {
    handleMessage(event) {
      let message = event.detail.data.message;
      console.log('Received message: ' + message);
      // 在这里你可以根据接收到的消息来执行相应的方法
    }
  }
}
</script>

二、使用 uni.webview

1.下载 uni SDK 到本地

2. H5端在 index.html 中引入

<!DOCTYPE html>
<html>
<head>
	<!-- -->
</head>
<body>
  <div id="app"></div>
</body>
<script type="text/javascript" src="./uni/uni.webview.js"></script>
<script>
  document.addEventListener('UniAppJSBridgeReady', function() {
    uni.webView.getEnv(function(res) {
      console.log('当前环境:' + JSON.stringify(res));
    });
  });
</script>
</html>
  • 把 uni.webview.1.5.5.js 下载到本地或者自己的服务器
  • 在引用依赖的文件后,需要在 HTML 中监听 UniAppJSBridgeReady 事件触发后,才能安全调用 uni 的 API
  • uni 对象会被挂载到 window 下

3. 在 h5 中发送消息

uni.webView.postMessage({
  data: {
    message: 'Hello from H5',
  }
});
  • uni.postMessage 中的参数格式,必须是 data: {}。也就是说,传递的消息信息必须在 data 这个对象中。

4. 在 web-view 中接收消息

<template>
  <view>
    <web-view src="/hybrid/html/index.html" @message="handleMessage"></web-view>
  </view>
</template>

<script>
export default {
  methods: {
    handleMessage(event) {
      let { message } = event.detail.data[0];
      console.log('Received message: ' + message);
      // 在这里你可以根据接收到的消息来执行相应的方法
    }
  }
}
</script>
  • 每次执行 postMessage 后,传递的消息会以数组的形式存放。因此,在 web-view 的 message 事件回调中,接收到的 event.detail.data 的值是一个数组。

总结

在博主的项目中方案一不适用,在 uni-app 中没有接收到 h5 发送的消息,采用方案二成功发送并接收,故推荐方案二。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值