根據history的popstate事件沒法判斷瀏覽器點擊前進仍是後退問題

場景:經過popstate事件解決了瀏覽器後退時未退出本文件,點擊一次後退後,瀏覽器的前進按鈕的狀態是可點,此時仍然是在處理後退的邏輯,致使頁面混亂。瀏覽器

措施:1.在第一次執行pushHistory方法時插入的歷史記錄,點擊後退,能經過popstate觸發時state屬性值進行判斷,若爲null,則點擊是後退,如果對象中包含插入歷史記錄的信息,則未前進操做。spa

           2.插入多條歷史記錄時,並處在第一次插入歷史記錄幀以後,沒法判斷是前進操做仍是後退操做。顯然,popstate事件並不適用。經嘗試後,改成hashchange事件,hashchange事件對象中包含變化先後的連接地址(oldURL和newURL),將每次的pushHistory中添加錨點,獲取錨點值大小來判斷前進或者後退。code

           3.點擊前進時,不執行後退的邏輯,而且頁面不能前進,只能去back()。同理,刷新時,頁面要go(-n)。對象

代碼以下:blog

        var newURL='';
        var oldURL='';
        var isForward=false;//是不是前進
        if (window.location.hash !== "") {//頁面刷新時,根據hash判斷回到頁面最開始狀態
            var i=Number(window.location.hash.replace('#',''));
            window.history.go(1-i);
            isForward=true;
        }
        window.addEventListener('hashchange', function(e) {
            newURL=e.newURL.slice(-2,-1)=='#'?e.newURL.slice(-1):0;
            oldURL=e.oldURL.slice(-2,-1)=='#'?e.oldURL.slice(-1):0;
            if(!isForward){
                if(parseInt(newURL)<parseInt(oldURL)){
                    ..........//單頁面中業務後退邏輯
                }else {
                    //前進時不操做
                    window.history.back();
                    isForward=true;
                    var dia=$.dialog({
                        title:'提示',
                        content:'頁面內不能前進',
                        button:["關閉"]
                    });

                }
            }else {
                isForward=false;
            }

        }, false);    
相關文章
相關標籤/搜索