背景:公司有好幾款小程序般贼,我負(fù)責(zé)的一款是論壇類的愧哟,其他小程序需要接入我的小程序惑申。
我的小程序提供了論壇帖子詳情頁(yè)供其他小程序直接進(jìn)入,傳入帖子id即可
eg.
wx.navigateToMiniProgram({
appId: 'xxxx', // 固定傳參
path: 'pages/public/bbs-post-detail?id=123',
envVersion: 'develop', // 'develop開發(fā)版 trial體驗(yàn)版 release正式版'
extraData: {
},
success(res) {
// 打開成功
}
})
然后我的bbs-post-detail
頁(yè)面翅雏,在onShow
里去接傳入的參數(shù)圈驼。
至于為什么要在
onShow
里接呢,是因?yàn)?code>onLoad只調(diào)用一次望几,如果用戶先打開了論壇小程序绩脆,并且進(jìn)入了帖子詳情,那么從別的小程序跳轉(zhuǎn)過(guò)來(lái)進(jìn)帖子詳情橄抹,就不會(huì)顯示想要顯示的帖子了靴迫。
所以一開始我的邏輯是,在onLoad
中讀取內(nèi)部頁(yè)面?zhèn)鲄⒌?code>options楼誓,并且獲取帖子詳情玉锌,在onShow
里使用wx.getEnterOptionsSync()
去獲取別的小程序傳過(guò)來(lái)的參數(shù),并且判斷進(jìn)入場(chǎng)景是1037
疟羹,就使用onShow
獲取到的id
獲取帖子詳情主守。
本來(lái)一切都很正常,直到有一天發(fā)現(xiàn)有人觸發(fā)了列表點(diǎn)擊所有帖子進(jìn)入詳情都是同一篇帖子榄融。
于是debug参淫,于是發(fā)現(xiàn):
小程序在
onHide
的時(shí)候,會(huì)將頁(yè)面onLoad
時(shí)的參數(shù)放入全局的options
中
猜測(cè)小程序這么干愧杯,是為了你下次再打開小程序時(shí)涎才,依然還是跟你離開時(shí)的狀態(tài)一樣。
但是他并不會(huì)清除掉scene
的值力九,并且耍铜,如果在帖子詳情頁(yè)調(diào)起分享的聯(lián)系人界面,就會(huì)調(diào)用小程序或者頁(yè)面的onHide
(沒(méi)有具體測(cè)是哪一個(gè)的onHide
)跌前。所以問(wèn)題就來(lái)了棕兼,我詳情頁(yè)的onShow
里面,能讀到scene===1037
并且能讀取到有帖子id舒萎。
所以只要用戶是從別的小程序來(lái)的程储,并且在詳情頁(yè)調(diào)用分享的聯(lián)系人界面,那么這個(gè)用戶每次從列表進(jìn)詳情頁(yè)臂寝,都會(huì)走onShow
的邏輯章鲤,取那個(gè)固定的帖子id。
解決方案:
在內(nèi)部頁(yè)面跳轉(zhuǎn)中咆贬,加上一個(gè)from
參數(shù)败徊,用來(lái)標(biāo)記是頁(yè)面內(nèi)部跳轉(zhuǎn)進(jìn)的詳情頁(yè),并且在詳情頁(yè)的onShow
里面判斷如果有from
并且是內(nèi)部傳的from
掏缎,就不去wx.getEnterOptionsSync()
了皱蹦。搞定煤杀。