小程序分享鏈接onShareAppMessage的具體用法
onShareAppMessage用法:
只需要在button標(biāo)簽中加入open-type="share",小程序ui就會自動識別分享鏈接功能
<button data-name="shareBtn" open-type="share">分享</button>
js中代碼如下:
onShareAppMessage: function( options ){ var that = this; // 設(shè)置菜單中的轉(zhuǎn)發(fā)按鈕觸發(fā)轉(zhuǎn)發(fā)事件時的轉(zhuǎn)發(fā)內(nèi)容 var shareObj = { title: "轉(zhuǎn)發(fā)的標(biāo)題", // 默認(rèn)是小程序的名稱(可以寫slogan等) path: '/pages/share/share', // 默認(rèn)是當(dāng)前頁面,必須是以‘/'開頭的完整路徑 imageUrl: '', //自定義圖片路徑,可以是本地文件路徑、代碼包文件路徑或者網(wǎng)絡(luò)圖片路徑,支持PNG及JPG,不傳入 imageUrl 則使用默認(rèn)截圖。顯示圖片長寬比是 5:4 success: function(res){ // 轉(zhuǎn)發(fā)成功之后的回調(diào) if(res.errMsg == 'shareAppMessage:ok'){ } }, fail: function(){ // 轉(zhuǎn)發(fā)失敗之后的回調(diào) if(res.errMsg == 'shareAppMessage:fail cancel'){ // 用戶取消轉(zhuǎn)發(fā) }else if(res.errMsg == 'shareAppMessage:fail'){ // 轉(zhuǎn)發(fā)失敗,其中 detail message 為詳細(xì)失敗信息 } }, complete: fucntion(){ // 轉(zhuǎn)發(fā)結(jié)束之后的回調(diào)(轉(zhuǎn)發(fā)成不成功都會執(zhí)行) } }; // 來自頁面內(nèi)的按鈕的轉(zhuǎn)發(fā) if( options.from == 'button' ){ var eData = options.target.dataset; console.log( eData.id); // shareBtn // 此處可以修改 shareObj 中的內(nèi)容 shareObj.path = '/pages/goods/goods?goodId='+eData.id; } // 返回shareObj return shareObj; }
在實際應(yīng)用中,會碰到這種情況:
微信小程序分享時,需要調(diào)用一個ajax(Promise)請求,然后return 一個對象,怎么同步實現(xiàn)?
比如:微信小程序分享時會調(diào)用 onShareAppMessage 方法,他會return 一個對象作為分享時的參數(shù)。但是我需要在他return之前調(diào)用一個ajax方法getShareCode,怎么樣同步實現(xiàn)?
//將字符串鏈接轉(zhuǎn)為二維碼,如:轉(zhuǎn)換前 itemid/344*fromuser/4909*shopid/75,轉(zhuǎn)換后 KtIQE4j9OP4JNGS2dsZy getShareCode: function () { var that = this; util.request(api.CreateShareCode, { sharecode: 'itemid/' + that.data.productid + '*fromuser/' + user.getBuyerUserId() + '*shopid/' + that.data.shopId }).then(function (res) { if (res.statusCode === 0) { that.setData({ newShareCode: res.sharedata }); } }); }, //分享功能 onShareAppMessage: function () { this.getShareCode(); let that = this; var newShareCode = that.data.newShareCode; var shareBackUrl = 'pages/goods/goods?scene=' + newShareCode; return { title: that.data.goods.title, path: shareBackUrl } },
嘗試用async await 和 Promise都沒有得到想要的結(jié)果。
不能用async await原因是, 如果 onShareAppMessage 是async函數(shù),分享時會調(diào)用這個方法,但是分享的事件是走的默認(rèn)的分享,沒用使用我return的參數(shù)對象。Promise同理。
而且return的對象寫到請求方法里面也會出現(xiàn)上面的問題:方法會被調(diào)用,但是分享事件沒有用return的參數(shù)。如下:
//分享功能 onShareAppMessage: function () { var that = this; util.request(api.CreateShareCode, { sharecode: 'itemid/' + that.data.productid + '*fromuser/' + user.getBuyerUserId() + '*shopid/' + that.data.shopId }).then(function (res) { if (res.statusCode === 0) { var newShareCode = res.sharedata; var shareBackUrl = 'pages/goods/goods?scene=' + newShareCode; return { title: that.data.goods.title, path: shareBackUrl } } }); },
jQuery的ajax請求可以這么設(shè)置同步請求:
$.ajaxSetup({ async: false });
async 方法,別人調(diào)用的時候,會立刻返回一個Promise,而return里的path,則是在返回的那個getShareCode里獲取的。微信調(diào)用這個方法拿的是返回值,也就是一個Promise,而Promise里沒有他需要的那些參數(shù),所以就是默認(rèn)的分享了。
換句話說,這個Share回調(diào)不允許有異步操作。能改成同步就改,不能改的話,就得改代碼邏輯了。
結(jié)果發(fā)現(xiàn)這個Share回調(diào)還真不允許有異步操作。
曲線救國的方法就多了,比如:
1、在頁面加載的時候先請求好數(shù)據(jù),存在data里
2、寫個阻塞的函數(shù)
3、封裝自己的分享函數(shù)onShareAppMessage實現(xiàn)分享參數(shù)的動態(tài)獲取
到此這篇關(guān)于小程序分享鏈接onShareAppMessage的具體用法的文章就介紹到這了,更多相關(guān)小程序分享鏈接onShareAppMessage內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實現(xiàn)table表格內(nèi)針對某列內(nèi)容進(jìn)行即時搜索篩選功能
這篇文章主要介紹了JS實現(xiàn)table表格內(nèi)針對某列內(nèi)容進(jìn)行即時搜索篩選功能,涉及javascript針對HTML元素的遍歷、屬性動態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下2018-05-05小程序webView實現(xiàn)小程序內(nèi)嵌H5頁面的全過程
在微信小程序中內(nèi)嵌H5頁面是一種常見的需求,因為H5頁面具有靈活性和跨平臺性,可以彌補小程序原生代碼的不足,這篇文章主要給大家介紹了關(guān)于小程序webView實現(xiàn)小程序內(nèi)嵌H5頁面的相關(guān)資料,需要的朋友可以參考下2024-07-07JS實現(xiàn)鼠標(biāo)拖拽盒子移動及右鍵點擊盒子消失效果示例
這篇文章主要介紹了JS實現(xiàn)鼠標(biāo)拖拽盒子移動及右鍵點擊盒子消失效果,涉及javascript事件響應(yīng)及頁面元素屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-01-01