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
网友回复