防止頁面後退(使瀏覽器後退按鈕失效)

防止頁面後退(使瀏覽器後退按鈕失效)javascript

 

  原理:用新頁面的URL替換當前的歷史紀錄,這樣瀏覽歷史記錄中就只有一個頁面,後退按鈕永遠失效。html

     :history.go和history.back(包括用戶按瀏覽器歷史前進後退按鈕)觸發,java

       頁面因爲使用pushState修改了history),會觸發popstate事件。json

    【代碼以下】瀏覽器

      注:直接放在不想後退跳轉的頁面便可!post

  方法一:
       <script type="text/javascript">
            jQuery(document).ready(function ($) {
                if (window.history && window.history.pushState) {
        $(window).on('popstate', function () {
            window.history.forward(1);
        });
      }
    });
  </script>url

 

  方法二【推薦】:spa

  $(function() {
  if (window.history && window.history.pushState) {
  $(window).on('popstate', function () {
  window.history.pushState('forward', null, '#');
  window.history.forward(1);
  });
  }
  window.history.pushState('forward', null, '#'); //在IE中必須得有這兩行
  window.history.forward(1);
  })htm

 

其中涉及到的方法詳細介紹:對象

1、window.history:表示window對象的歷史記錄

2、 歷史記錄的前進和後退


   window. history.forward() --- 此方法加載歷史列表中的下一個 URL,同瀏覽器中點擊向前按鈕;
   window. history.back() --- 此方法加載歷史列表中的前一個 URL,同瀏覽器中點擊後退按鈕。
  

  可移動到指定歷史記錄點:
    經過指定一個相對於當前頁面位置的數值,你可使用 go() 方法從當前會話的歷史記錄中加載頁面
    (當前頁面位置索引值爲0,上一頁就是-1,下一頁爲1)
    如:要後退一頁(至關於調用back()):
            window.history.go(-1);
          向前移動一頁(至關於調用forward()):
            window.history.go(1);

  window.history.length

  能夠查看length屬性值,可知道歷史記錄棧中共有多少個記錄點。
      


3、操做歷史記錄點


    HTML5的新API擴展了window.history,可實現存儲、替換當前歷史記錄點,以及監聽歷史記錄點。
    

  一、存儲、替換當前歷史記錄點
        建立當前歷史記錄點pushState(state, title, url):建立(添加)一個新的history實體,
                    state:狀態對象,記錄歷史記錄點的額外對象(要跳轉的URL),能夠爲空;
                    title:頁面標題,目前全部瀏覽器都不支持;
                    url:可選的url,瀏覽器不會檢查url是否存在,只改變url,url必須同域。
                    window.history.pushState(json,」",」http://www.qingdou.me/post-1.html」);
        替換當前歷史記錄點replaceState():修改當前的history實體,不會新增。
                    相似replace(url),要更新當前歷史記錄的狀態對象或URL時,使用replaceState()方法會更合適。
    

  2 、監聽歷史記錄點onpopstate()

     當history實體被改變時,popstate事件將會發生; onhashchange()可監聽URL的hash部分。
    
     三、讀取現有state        當頁面加載時,它可能會有一個非空的state對象。當頁面從新加載,頁面將收到onload事件,但不會有popstate事件。        然而,若是你讀取history.state屬性,將在popstate事件發生後獲得這個state對象。   

相關文章
相關標籤/搜索