2015-09-07 202 views
10

我試圖阻止用戶回到我的web應用程序。爲此,我嘗試捕獲window.onpopstate並添加e.preventDefault以取消後退按鈕效果。是否可以在window.onPopState中設置e.preventDefault?

但似乎並沒有發生。

window.addEventListener('popstate',function(e){ 
console.log(e); e.preventDefault(); 
}); 

是不是可以防止瀏覽器的popstate事件?或者我做錯了什麼?

回答

15

根據這一documentation的popstate事件不是撤銷:

規格:HTML5
接口:PopStateEvent
泡沫: 是
可取消:沒有
目標:默認視圖
默認操作:無

0

首先「不可能」永遠不是一個可以接受的答案。

其次你可以補償popstate的bug。在我的例子中,我豐富的編輯必須不斷補償懶惰的密鑰:Backspace。它不是一個後退按鈕的有效鍵(就像空格鍵爲「翻頁」一樣),但人們將其個人喜好強加於世界而不是添加瀏覽器擴展so當人們按下它時,有時觸發popstate而不是編輯器刪除鍵盤插入符左側的任何字符。

下面的代碼(不在此處發佈依賴關係)會檢測何時觸發popstate錯誤,並使用e.preventDefault();將其擊中,然後使用history.go(1);修復地址欄地址。使用編輯器的人不會注意到任何事情,因爲瀏覽器不允許操作DOM。這個代碼是最小的(其他人可能會在各種情況下補償這個bug),我現在只在Gecko/Firefox中測試過,所以一定要測試基於Blink,Presto,Trident和WebKit的瀏覽器。

window.onpopstate = function(e) 
{ 
if (id_('editor') && is_node_parent(document.activeElement,id_('editor'))) 
{ 
    e.preventDefault(); 
    history.go(1); 
} 
} 
+2

「不可能」肯定能有一個答案 – Rob

+0

我申請一個bug在Chrome有關退格鍵和取得有關數據丟失的高風險較強的情況下,你知道嗎?他們傾聽並將退格視爲退出Chrome的後退按鈕。經過這麼多年,所花的一切都是要問。現在,如果只有YouTube會聽空間吧... – Zectbumo

相關問題