pageshow的persisted總爲false解決方案以及返回頁面刷新

以前在項目中使用pageshow,發現頁面返回的時候persisted依然爲false,這時候只好找其餘方案解決。 這時候發現有一個window.performance對象,performance.navigation.type是一個無符號短整型javascript

  • TYPE_NAVIGATE (0):java

    當前頁面是經過點擊連接,書籤和表單提交,或者腳本操做,或者在url中直接輸入地址,type值爲0android

  • TYPE_RELOAD (1)bash

    點擊刷新頁面按鈕或者經過Location.reload()方法顯示的頁面,type值爲1微信

  • TYPE_BACK_FORWARD (2)async

    頁面經過歷史記錄和前進後退訪問時。type值爲2 TYPE_RESERVED (255) 任何其餘方式,type值爲255post

這真是咱們須要的部分,因而能夠預見,解決方案以下:ui

window.addEventListener('pageshow', () => {
  if (e.persisted || (window.performance && 
    window.performance.navigation.type == 2)) {
    location.reload()
  }
}, false);
複製代碼

引用:stackoverflow.com/questions/1…this

返回頁面刷新

// 解決 Android 返回不刷新
export function androidBackRefresh() {
    window.history.replaceState(null, '', window.location.href + '&t=' + new Date().getTime());
}



// 方法2
 window.addEventListener('pageshow', async (event) => {

            if (event.persisted || window.performance && window.performance['navigation']['type'] == 2) {
                alert(event.persisted || window.performance && window.performance['navigation']['type']);
                const { data, logid, msg } = await this.props.backRefresh({
                    t: new Date().getTime()
                });
                
                this.setState({
                   ...
                });
            }
        }, false);
        
複製代碼

JS監聽手機物理返回鍵(及IOS微信端的bug)

相關文章
相關標籤/搜索