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

时间:2014-10-16 13:15:46

标签: javascript internet-explorer anchor internet-explorer-10 onbeforeunload

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

然后你会在一个只有内容'blah'的新页面上结束。这就是javascript:链接工作的方式。 void不返回任何内容(undefined),当javascript:链接未返回任何内容时,它不会替换页面内容。

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

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

据我所知,对此唯一真正的解决方法是确保您正确preventDefault点击事件。