+
96
-

回答

h5端可通过jssdk postMessage来操作小程序

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
 
// javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) })
小程序

<web-view src="{{url}}" bindmessage="onLoadMessage" bindload="onWebLoad" binderror="onWebError"></web-view>

注意:wx.miniProgram.postMessage 向小程序发送消息,会在以下特定时机触发组件的message事件:小程序后退、组件销毁、分享、复制链接,也就是webview的bindmessage事件不会立即执行,需要等到小程序后退、组件销毁、分享、复制链接的时候才会执行回调,真是个鸡肋啊。

解决办法就是:h5端传值完了后,wx.miniProgram.postMessage({ data: {foo: 'bar'} }),立即执行wx.miniProgram.navigateTo({url: '/path/to/page'})到空白页,空白页再跳转回来,这个时候就能触发webview的bindmessage事件获取消息了,主要回退的时候webview会重新加载h5页面,注意做好缓存处理

还有一种办法就是:诱导用户点击分享按钮触发。

小程序传值给h5

需要传给小程序的值当做参数放在当前url上,小程序中通过点击转发即可获取。这种方法缺点是只能在点击转发时才可传。

小程序端:

<web-view src="https://example.html?id=123"></web-view>

h5端通过url获取参数

<script>
    let id = getUrlParam('id'); 
</script>

参考https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

网友回复

我知道答案,我要回答