在小程序內直聯h5的頁面(pages/webview/webview.js),該頁面爲<web-view>的容器,使用<web-view>組件web
<web-view wx:if="{{h5url}}" src="{{h5url}}" bindmessage="h5PostMessage" ></web-view>
須要bindmessage事件和postMessage方法小程序
bindmessage:網頁向小程序 postMessage 時,會在特定時機(小程序後退、組件銷燬、分享)觸發並收到消息。e.detail = { data }微信
也就是說,該事件的觸發時機只有三種,是延遲的。post
能夠將分享的數據經過該事件獲取。this
一、如何分享這個h5頁面url
在pages/webview/webview.js這個容器頁面須要定義兩個事件:spa
//h5向小程序發送的數據 h5PostMessage: function (e) { this.h5Data= e.detail.data; //當用戶點擊這個h5頁面的分享時獲取到 }, // 用戶點擊右上角分享 onShareAppMessage: function (options) { return { title: this.h5Data.title, desc: this.h5Data.desc,, path: this.h5Data.path } }
h5.js 中使用微信提供的jssdk中的方法code
//該方法在頁面create完成以後就能夠調用,不須要事件去觸發,提早將信息發出去,等到點擊分享的時候就能夠獲取到這個信息了
wx.miniProgram.postMessage({ data: { title: '分享的標題', desc:'分享的描述', path:'/pages/share/share.js?data='+JSON.stringfy({url:encodeURIComponent('當前h5頁面的url地址')}) //重點,share.js是小程序的頁面中,從分享進入的h5的落地頁 });
在小程序中須要兩個頁面,來作web-view 的容器,一個是內聯的h5頁面,一個是分享出去後,從分享進入的頁面xml
以上是分享的流程blog
二、怎麼從分享進入時,使頁面顯示的是分享的h5頁面
在/pages/share/share.wxml中
<web-view wx:if="{{h5url}}" src="{{h5url}}"></web-view>
在/pages/share/share.js中:
onLoad: function (options) { var data = options.data;//postMessage path中帶的url 參數 var url =decodeURIComponent(data.url); this.setData({url:url}); }, // 用戶點擊右上角分享 onShareAppMessage: function (options) {
var path = '/pages/share/share.js';
var url = encodeURIComponent(options.webViewUrl);
path += '?data=' + JSON.stringify({ url: url });
return { path: path }; }