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

为什么IE10在使用javascript href单击锚元素时触发beforeunload事件以及如何防止它,javascript,internet-explorer,anchor,internet-explorer-10,onbeforeunload,Javascript,Internet Explorer,Anchor,Internet Explorer 10,Onbeforeunload,为了跟踪用户何时离开页面,我们在卸载前收听事件。一切正常,直到使用IE10的用户在href参数中使用javascript单击空链接(锚定)而不是url。例如: <a href="javascript:void(0)">Empty link with JS in href</a> 这种情况下,IE10有时会在卸载前触发事件。Chrome/IE11工作正常(0在卸载之前s),而IE10会不时地启动它,特别是当你快速点击它时。让我们来试试。 有人知道它为什么会发生以及如何

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

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

这种情况下,IE10有时会在卸载前触发
事件。Chrome/IE11工作正常(0
在卸载之前
s),而IE10会不时地启动它,特别是当你快速点击它时。让我们来试试。
有人知道它为什么会发生以及如何修复吗?我很乐意移除/替换标记中的此类锚,但在我的情况下,这是不可能的。

谢谢。

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

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

然后你会在一个新的页面上看到“废话”的内容。这就是
javascript:
链接的工作方式
void
不返回任何内容(
undefined
),当
javascript:
链接不返回任何内容时,它不会替换页面内容

从理论上讲,如果目标资源是下载,则会发生类似的情况-通常会卸载页面,但由于目标是下载,因此页面不会更改。而
204 No Content
的HTTP响应也应该触发这种行为

但是,正如您所注意到的,这是一种不受欢迎的行为,因此更常见的情况是,在页面本身真正卸载之前,浏览器不会触发卸载事件。不幸的是,据我所知,这是浏览器级别的事情,超出了您的控制范围


据我所知,唯一真正的解决办法是确保您正确地
防止默认的
点击事件。

如果您可以在卸载
事件侦听器之前添加
,您也可以删除空链接。@Teemu不,不幸的是,这些链接是其他团队和其他开发人员实现的一部分,这些链接可能会在不同的情况下出现在不同的页面上,等等。谢谢您的详细回答。顺便说一句,下载链接是我们在卸载之前防止这种行为的另一种情况。