有没有可能在window.onpopstate



我试图阻止用户回到我的web应用程序中。为此,我尝试捕捉window.onpopstate并添加e.preventDefault来取消后退按钮效果。

但这似乎不会发生。

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

是否可以阻止浏览器的popstate事件?还是我做错了什么?

根据本文档,popstate事件是不可取消的:

规格:HTML5
接口:PopStateEvent
是的,
Cancelable: No
Target: defaultView
默认动作:None

First off & " not possible& ";绝不是可接受的答案。

其次,可以补偿popstate bug。例如,我的富编辑器必须不断补偿懒惰的混蛋键:退格。它不是一个有效的返回键(就像空格键表示"页面下拉"),但是人们把他们的个人喜好强加给了这个世界,而不是添加浏览器扩展名,所以当人们按下时,有时会触发popstate,而不是编辑器删除键盘插入符号左边的任何字符。

下面的代码(依赖于我的平台的文档)检测popstate错误何时被触发,用e.preventDefault();拍打它的脸,然后用history.go(1);修复地址栏地址。使用编辑器的人不会注意到发生了什么,因为不允许浏览器操作DOM。这段代码是最小的(其他人可能会在各种情况下弥补这个错误),我目前只在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);
 }
}

最新更新