是否可以在window.onPopState中进行e.preventDefault?

pho*_*nix 14 javascript back-button javascript-events popstate

我试图阻止用户回到我的网络应用程序.为此,我尝试捕获window.onpopstate并添加e.preventDefault以取消后退按钮效果.

但它似乎没有发生.

window.addEventListener('popstate',function(e){ 
console.log(e); e.preventDefault();  
});
Run Code Online (Sandbox Code Playgroud)

是否无法阻止浏览器的popstate事件?或者我做错了什么?

Pat*_*lug 23

根据此文档,popstate事件不可取消:

规范:HTML5
接口:PopStateEvent
Bubbles:Yes Cancelable
:No
Target:defaultView
默认操作:无


Joh*_*ohn 5

首先,“不可能”永远不是一个可以接受的答案。

其次,您可以补偿popstate错误。例如,我的丰富编辑器必须不断补偿laast-bastard密钥:Backspace。它不是后退按钮的有效键(就像空格键用于“页面下移”一样),但是人们将个人喜好强加于世界,而不是添加浏览器扩展,因此当人们按下它时,有时会触发popstate而不是编辑器删除任何内容字符在键盘插入符号的左侧。

以下代码(此处未发布依赖项)检测何时触发popstate错误,并使用a 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);
 }
}
Run Code Online (Sandbox Code Playgroud)

  • “不可能”可以肯定是答案 (14认同)
  • 我在Chrome浏览器上提交了一个关于退格的错误,并提出了有关数据丢失高风险的有力论据,您知道吗?他们倾听了声音,并使用了退格键作为Chrome的后退按钮。这些年来,只需要问问。现在,如果只有YouTube会听空格键... (5认同)
  • “不可能”是对任何事情的真正答案,非常非常罕见。特别是考虑到这些机器通常面向人类感官,从技术上讲,它可以“感知”甚至在物理上不可能的事物。 (3认同)
  • 您坚持重新添加的文字不合适;停止回滚。 (2认同)