2011-12-30 82 views
6

通過窗口的卸載事件,可以向用戶顯示一個確認對話框,例如,在存在正在等待的正在進行的請求的情況下完成並從頁面導航將終止該請求。取消/中止/確認HTML 5狀態更改事件(onpopstate)

有沒有一種方法可以用HTML5歷史API的onpopstate來實現這一點?或者有相同結果的其他方式?

回答

0

我想你可以修改pushState的行爲,要求確認推一個新狀態之前:

// Store original pushState 
var _pushState = window.history.pushState; 
// Some bad global variable to determine if confirmation is needed 
var askForConfirm = true; 
// Modify pushState behavior 
window.history.pushState = function() { 
    if(!askForConfirm || confirm('Are you sure you want to quit this page ?')) { 
     // Call original pushState 
     _pushState.apply(window.history,arguments); 
    } 
}; 
+0

但是,這並不關心用戶導致事件觸發的情況(例如通過按下後退按鈕) – Mansour 2011-12-30 12:23:28

+0

嗯。那麼,也許可以在onpopstate事件上處理這個事情,通過存儲之前的狀態並在取消時將其推回來......看起來有點棘手。 – 2011-12-31 12:24:54

0

我不知道這是否有助於你的情況,但Sammy.js,一個流行的哈希-routing庫有一個before處理程序。我在我的應用程序中使用它來記錄先前訪問過的散列,如果它是散列,我想阻止它們離開,那麼返回false將使它們保留在該頁面上。你仍然需要重寫URL來顯示前一頁,但它似乎在工作。

查看my answer in this other thread瞭解更多信息。