web-view内嵌H5与uniapp数据的实时传递

场景:

在 uni-app 中通过 web-view 内嵌 H5 ,要做到在 H5 发起传递信息传给 uni-app 并且 uni-app 能实时接收。


解决方案:

1.在uni-app项目的main.js文件中引入和创建一个事件总线对象:


import Vue from 'vue'
export const EventBus = new Vue()

2.在uni-app中定义一个事件监听函数,在该函数中实现对来自web-view的消息进行处理:


import {EventBus} from '@/main.js'

// 监听事件
EventBus.$on('messageFromH5', (data) => {
  // 处理来自web-view的消息
  console.log('收到来自H5页面的消息:', data)
})

3.在web-view的H5页面中使用postMessage()方法向uni-app页面发送消息,同时将发送的消息格式转换为对象格式:


var messageData = {
  content: '这是从H5页面中发送的消息'
}

var sendData = JSON.stringify(messageData)
window.parent.postMessage(sendData, '*')

  • 在调用postMessage方法时,第二个参数需要指定为’*',表示任意域名都可以接收到消息。
  • uniapp的web-view组件的onMessage中的回调函数,只有在页面还没有被销毁前才会响应,因此需要在页面销毁前即可获得消息,如果需要在后退和分享时也能获得消息,则需要在生命周期函数onUnload中清理原有的web-view,再重新生成web-view,并在重新生成的web-view中监听消息。
  • 在web-view中使用postMessage方法发送数据时,需要确保发送的数据是一个标准的JSON对象,避免其他数据格式的问题而导致消息无法被正确接收。

4.在web-view组件标签中设置onMessage属性,监听web-view中传过来的消息,并对其进行相应的处理:


<web-view src="https://example.com/h5page" @message="onMessage"></web-view>

export default {
  methods: {
    onMessage (event) {
      // 对从web-view中接收到的消息进行处理
      console.log('收到来自web-view的消息:', event.detail.data)
      // 将消息发送到uni-app中的事件总线
      EventBus.$emit('messageFromH5', event.detail.data)
    }
  }
}

这里的onMessage()方法通过监听web-view的message事件来实现对从web-view中传过来的消息进行处理。同时,将接收到的消息发送到uni-app页面中已经创建的事件总线中,以便不在内嵌的页面也能够接收消息。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值