關於支付寶全局自定義分享控制詳見:支付寶小程序的攜帶參數全局分享實現。
為什么要寫這篇文章?
微信小程序沒有全局分享配置,頁面開啟分享功能必須要在頁面中定義分享事件函數 onShareAppMessage 才可以。如果項目中對頁面分享的需求比較復雜點,那么默認的自定義分享會很麻煩的,而且還不一定能滿足我們的需求,因此全局自定義分享配置的實現就非常有必要了。
不僅僅能實現全局分享,還可以對不同頁面實現不同的分享配置
本例結合隱式路由,可實現全局控制所有頁面的分享配置,包括全局分享、頁面默認分享、頁面自定義分享,如下圖所示:
如上,一部分頁面可以進行自定義分享,另一部分進行頁面默認分享(相當於頁面開啟分享功能,但是沒有進行配置),其他大部分頁面都進行全局分享配置。
示例代碼:
1 // app.js 2 /** 3 * 全局分享配置,頁面無需開啟分享 4 * 使用隱式頁面函數進行頁面分享配置 5 * 使用隱式路由獲取當前頁面路由,並根據路由來進行全局分享、自定義分享 6 */ 7 ! function () { 8 //獲取頁面配置並進行頁面分享配置 9 var PageTmp = Page 10 Page = function (pageConfig) { 11 //1. 獲取當前頁面路由 12 let routerUrl = "" 13 wx.onAppRoute(function (res) { 14 //app.js中需要在隱式路由中才能用getCurrentPages()獲取到頁面路由 15 let pages = getCurrentPages(), 16 view = pages[pages.length - 1]; 17 routerUrl = view.route 18 }) 19 20 //2. 全局開啟分享配置 21 pageConfig = Object.assign({ 22 onShareAppMessage: function () { 23 //根據不同路由設置不同分享內容(微信小程序分享自帶參數,如非特例,不需配置分享路徑) 24 let shareInfo={} 25 let noGlobalSharePages=["index/index"] 26 //全局分享配置,如部分頁面需要頁面默認分享或自定義分享可以單獨判斷處理 27 if (!routerUrl.includes(noGlobalSharePages)){ 28 shareInfo = { 29 title: "自定義全局分享", 30 imageUrl: wx.getStorageSync("shareUrl") 31 } 32 } 33 return shareInfo 34 } 35 }, pageConfig); 36 // 配置頁面模板 37 PageTmp(pageConfig); 38 } 39 }();
如上,無需頁面開啟和配置,只需要在app.js中編寫以上代碼,即可對所有頁面進行自定義分享配置,從此無需再去頁面開啟、配置分享轉發。
注意事項:
1.本例中使用了 getCurrentPages() 函數獲取頁面路由,但是app.js中需要放在隱式路由 wx.onAppRoute() 的回調中才能獲取到;
2.使用本例方法,無需頁面中配置 onShareAppMessage() ,如頁面中配置分享事件函數,則會覆蓋全局分享。