詳解解決小程序中webview頁面多層history返回問題
小程序開發(fā)中遇到的問題:小程序中嵌套了一個(gè)webview頁面,webview頁面中有靜默授權(quán)(A1頁面靜默授權(quán)后重定向到A2頁面),點(diǎn)小程序原生的返回按鈕會返回到A1頁面,然后頁面就會反復(fù)靜默授權(quán)
預(yù)期表現(xiàn):點(diǎn)小程序原生的返回按鈕后返回到小程序上個(gè)頁面
解決方案:通過history.pushState添加歷史記錄名目,history.onpopstate監(jiān)聽歷史記錄條目發(fā)生變化時(shí),調(diào)用小程序APIwx.navigateBack
window.addEventListener('popstate', (event) => {
wx.miniProgram.navigateBack();
});
const code = getSearch('code'); // 偽代碼,獲取查詢參數(shù)
if (!code) { // 頁面A1
if (isWeixin()) {
// 微信環(huán)境
const redirectUrl = window.location.href + '&code=1';
window.location. + '?appid=' + appId +
'&redirect_uri=' + encodeURIComponent(redirectUrl) +
'&response_type=code&scope=snsapi_userinfo' +
'#wechat_redirect'; // 靜默授權(quán)偽代碼
} else {
alert('當(dāng)前不是微信環(huán)境');
}
} else { // 頁面A2
history.pushState({page: 1}, null, window.location.href);
}
剛開始想的解決辦法是用localStorage,跳轉(zhuǎn)到A2時(shí)存儲一個(gè)值,返回到A1時(shí)獲取這個(gè)值,如果有值就清除這個(gè)值并且回退到小程序頁面。聽起來似乎也可行,但小程序的緩存和微信的緩存是同步的,如果在微信環(huán)境中直接訪問A1頁面,重定向到A2會存值,如果直接關(guān)閉頁面,不會被清除,那么在小程序中訪問時(shí)就直接回退了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序自定義tabbar custom-tab-bar 6s出不來解決方案(cover-view不兼容)
- 微信小程序 scroll-view 水平滾動(dòng)實(shí)現(xiàn)過程解析
- 微信小程序webview與h5通過postMessage實(shí)現(xiàn)實(shí)時(shí)通訊的實(shí)現(xiàn)
- 微信小程序移動(dòng)拖拽視圖-movable-view實(shí)例詳解
- 微信小程序webview組件交互,內(nèi)聯(lián)h5頁面并網(wǎng)頁實(shí)現(xiàn)微信支付實(shí)現(xiàn)解析
- 微信小程序webview 腳手架使用詳解
- 微信小程序與webview交互實(shí)現(xiàn)支付功能
- 微信小程序動(dòng)態(tài)添加view組件的實(shí)例代碼
- 微信小程序點(diǎn)擊view動(dòng)態(tài)添加樣式過程解析
相關(guān)文章
mpvue 頁面預(yù)加載新增preLoad生命周期的兩種方式
這篇文章主要介紹了mpvue 頁面預(yù)加載新增preLoad生命周期的兩種方式,本文重點(diǎn)給大家講解了第一種方式,需要的朋友可以參考下2019-10-10
簡單實(shí)現(xiàn)bootstrap導(dǎo)航效果
這篇文章主要為大家詳細(xì)介紹了如何簡單實(shí)現(xiàn)bootstrap導(dǎo)航效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
JavaScript實(shí)現(xiàn)可終止輪詢請求的方法
輪詢請求就是間隔相同的時(shí)間(如5s)后不斷地向服務(wù)端發(fā)起同一個(gè)接口的請求,當(dāng)然不能無限次去請求,所以輪詢必須要有個(gè)停止輪詢的機(jī)制,今天通過本文給大家介紹JavaScript實(shí)現(xiàn)可終止的輪詢請求,感興趣的朋友一起看看吧2022-06-06

