我试图阻止用户回到我的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);
}
}