類比瀏覽器後退事件

來源:互聯網
上載者:User

標籤:提示   win   有用   tor   turn   case   rip   cal   自訂   

      在工作中碰到一個需求:點擊瀏覽器的後退按鈕時,需要判斷當前頁面的表單資料是否已儲存;如果沒儲存,就給出提示。但瀏覽器並沒有後退事件,這個項目也沒有用什麼 MV** 之類的架構或庫,用的是 jQuery,於是只能嘗試類比瀏覽器後退事件。

      用的是 H5 中的 pushState 與 popstate,代碼如下:

var onBrowserBack = function(callback) {  var userAgent = navigator.userAgent.toLowerCase(),      isSafari = userAgent.indexOf(‘safari‘) > -1 && userAgent.indexOf(‘chrome‘) < 1,      referrer = document.referrer;  if (window.history && window.history.pushState) {    if (isSafari) {      window.onload = function() {        window.isLoaded = ‘isLoaded‘;      };    }    history.pushState(‘historyPushState‘, null, null);    window.onpopstate = function(event) {      history.pushState(null, null, null);      if (window.isLoaded === ‘isLoaded‘) {        window.isLoaded = ‘‘;      } else {        if (history.state === ‘historyPushState‘) {          history.forward(); // 自動“前進”一步,否則“前進”按鈕可點擊        } else {          if (typeof callback === ‘function‘ && callback(event) !== false) {            window.location.href = referrer;          }        }      }    };  }};

      popstate 事件會在使用者點擊瀏覽器(Chrome, Firefox, Safari)的“前進”和[上一頁] 按鈕時觸發,但在 Safari 中還多一種觸發的情況 ── load 頁面時也會觸發,例如由其它頁面跳轉過來,以及重新整理。因此,需要在 Safari 中排除這種情況,代碼裡用的是瀏覽器的使用者代理程式來檢測 Safari。

      調用:

onBrowserBack(function() {  console.log(‘popstate‘);    // 自訂跳轉到其它連結  window.location.href = ‘https://www.baidu.com‘;  return false;});

      如果要跳轉到其它頁面,需要用 js 手動跳轉。

      這種類比方式的問題在於,沒法點擊“前進”按鈕;並且,[上一頁] 按鈕只能回退到前一步,如果再點,就又回到了當前頁面(使用了 onBrowserBack 的頁面)。

類比瀏覽器後退事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.