小程序分享鏈接onShareAppMessage的具體用法
onShareAppMessage用法:
只需要在button標(biāo)簽中加入open-type="share",小程序ui就會(huì)自動(dòng)識(shí)別分享鏈接功能
<button data-name="shareBtn" open-type="share">分享</button>
js中代碼如下:
onShareAppMessage: function( options ){ var that = this; // 設(shè)置菜單中的轉(zhuǎn)發(fā)按鈕觸發(fā)轉(zhuǎn)發(fā)事件時(shí)的轉(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ā)成不成功都會(huì)執(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; }
在實(shí)際應(yīng)用中,會(huì)碰到這種情況:
微信小程序分享時(shí),需要調(diào)用一個(gè)ajax(Promise)請求,然后return 一個(gè)對象,怎么同步實(shí)現(xiàn)?
比如:微信小程序分享時(shí)會(huì)調(diào)用 onShareAppMessage 方法,他會(huì)return 一個(gè)對象作為分享時(shí)的參數(shù)。但是我需要在他return之前調(diào)用一個(gè)ajax方法getShareCode,怎么樣同步實(shí)現(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ù),分享時(shí)會(huì)調(diào)用這個(gè)方法,但是分享的事件是走的默認(rèn)的分享,沒用使用我return的參數(shù)對象。Promise同理。
而且return的對象寫到請求方法里面也會(huì)出現(xiàn)上面的問題:方法會(huì)被調(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)用的時(shí)候,會(huì)立刻返回一個(gè)Promise,而return里的path,則是在返回的那個(gè)getShareCode里獲取的。微信調(diào)用這個(gè)方法拿的是返回值,也就是一個(gè)Promise,而Promise里沒有他需要的那些參數(shù),所以就是默認(rèn)的分享了。
換句話說,這個(gè)Share回調(diào)不允許有異步操作。能改成同步就改,不能改的話,就得改代碼邏輯了。
結(jié)果發(fā)現(xiàn)這個(gè)Share回調(diào)還真不允許有異步操作。
曲線救國的方法就多了,比如:
1、在頁面加載的時(shí)候先請求好數(shù)據(jù),存在data里
2、寫個(gè)阻塞的函數(shù)
3、封裝自己的分享函數(shù)onShareAppMessage實(shí)現(xiàn)分享參數(shù)的動(dòng)態(tài)獲取
到此這篇關(guān)于小程序分享鏈接onShareAppMessage的具體用法的文章就介紹到這了,更多相關(guān)小程序分享鏈接onShareAppMessage內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)微信里判斷頁面是否被分享成功的方法
這篇文章主要介紹了JS實(shí)現(xiàn)微信里判斷頁面是否被分享成功的方法,結(jié)合實(shí)例形式分析了js調(diào)用微信接口判斷網(wǎng)頁分享功能的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06JS實(shí)現(xiàn)table表格內(nèi)針對某列內(nèi)容進(jìn)行即時(shí)搜索篩選功能
這篇文章主要介紹了JS實(shí)現(xiàn)table表格內(nèi)針對某列內(nèi)容進(jìn)行即時(shí)搜索篩選功能,涉及javascript針對HTML元素的遍歷、屬性動(dòng)態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下2018-05-05小程序webView實(shí)現(xiàn)小程序內(nèi)嵌H5頁面的全過程
在微信小程序中內(nèi)嵌H5頁面是一種常見的需求,因?yàn)镠5頁面具有靈活性和跨平臺(tái)性,可以彌補(bǔ)小程序原生代碼的不足,這篇文章主要給大家介紹了關(guān)于小程序webView實(shí)現(xiàn)小程序內(nèi)嵌H5頁面的相關(guān)資料,需要的朋友可以參考下2024-07-07JS實(shí)現(xiàn)鼠標(biāo)拖拽盒子移動(dòng)及右鍵點(diǎn)擊盒子消失效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)拖拽盒子移動(dòng)及右鍵點(diǎn)擊盒子消失效果,涉及javascript事件響應(yīng)及頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-01-01