为什么IE10在使用javascript href单击anchor元素时触发beforeunload事件以及如何防止它

为了跟踪用户何时离开页面,我们会收听beforeunload事件.一切正常,直到用户使用IE10,用href参数中的javascript而不是url点击空链接(锚点).例如:

<a href="javascript:void(0)">Empty link with JS in href</a>

这种情况使IE10有时会在beforeload事件之前触发. Chrome / IE11工作正常(0前载),而IE10会不时触发它,特别是如果你快速点击它.这是JSFiddle尝试它.
有谁知道它为什么会发生以及如何解决它?我很乐意在标记中删除/替换这样的锚点,但在我的情况下这是不可能的.
谢谢.

解决方法:

从技术上讲,IE10可能被认为是正确的,因为你正在卸载页面…有点.如果您的链接是:

<a href="javascript:'blah';">

然后你最终会在一个只有内容’blah’的新页面上.这就是javascript:links的工作原理. void返回任何内容(未定义),当javascript:link返回任何内容时,它不会替换页面内容.

理论上,如果目标资源是下载,则会发生类似的事情 – 通常会卸载页面,但由于目标是下载,因此页面不会更改.并且204 No Content的HTTP响应也应该触发此行为.

但是,正如您所注意到的,这是不受欢迎的行为,因此在页面本身被卸载之前,浏览器不会触发卸载事件变得更加常见.不幸的是,据我所知,这是一个浏览器级别的东西,并且在你无法控制之下.

据我所知,唯一真正的解决方法是确保你正确地防止你的点击事件.

上一篇:javascript – Anchor Onclick Division亮点


下一篇:javascript – 如何使用jquery将特定类添加到锚标记的href等于URL?