微信小程序web-view:网页与小程序间通信限制

当前微信小程序的调试基础库最新版本为2.3.0。

web-view可用于在小程序中内嵌网页。只要符合官方的条件,为web-view设置src属性来指定网页即可在小程序中显示。一个页面只能有一个web-view,且会自动铺满整个小程序页面。

因此,对于那些只需要进行显示的页面,例如公司官网等,该组件省去了小程序开发的麻烦,直接内嵌显示即可。当然页面最好对移动端做了适配。

 

然而,若希望与小程序进行通信交互,限制就比较大了。

当前有个需求,需要制作一个微信小程序,一方面需要调用小程序的蓝牙功能,另一方面需要使用一些小程序已删除的js功能。

于是有了如下思路:

  • 使用常规网页实现小程序删除的那部分js功能。
  • 使用web-view将网页内嵌到小程序中显示。
  • 网页与小程序之间进行数据的交互。
  • 使用小程序调用蓝牙功能。

思路正常,但无法实现,关键卡在网页与小程序之间进行数据的交互这一步上。

网页与小程序之间进行数据的交互有两部分:

  1. 小程序→网页

官网没有提供发送的接口,只能通过修改web-view的src属性,使用&来附加参数,并在网页中解析参数。

这一点可以做到。只是这意味着小程序每次向网页传参,都要刷新一次网页。

  1. 网页→小程序

官方文档只提供了一种方式:

  • 在web-view中添加bindmessage属性,并绑定一个函数,用于监听网页发来的消息。
  • 在网页中引入jweixin-x.x.x.js,然后调用wx.miniProgram.postMessage()来向小程序发送数据。

然而,实际上官方文档特意对bindmessage进行了说明:网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。

也就是说,这唯一的一种通信方式,并不是按照常规的思路“网页向小程序发送数据,然后小程序监听到并执行回调”运作的,只有(小程序后退、组件销毁、分享)这三种情况下,bindmessage才会被触发并接收消息。

所以,即使在网页中调用了wx.miniProgram.postMessage(),小程序也不会立即响应,bindmessage所绑定的函数不会执行。

 

虽然网页和小程序之间即时传参无法实现,不过小程序可以通过web-view的src属性来切换网页,网页也可以通过wx.miniProgram.navigateTo()来切换小程序的页面。这些功能都是微信通过JSSDK为web-view所内嵌的网页提供的支持,但仅仅是提供了一部分JSSDK的功能,限制同样很多。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值