2010-01-31 49 views
4

问题如下。如何通过单击Chrome中的链接确定onbeforeunload是否已导致

onbeforeunload在Firefox中很有魅力,它具有e.explicitOriginalTarget.activeElement,它显示了什么元素被点击导致它。

window.onbeforeunload = function(e){ 
if (e.explicitOriginalTarget.activeElement){ 
    return; 
} 

在Chrome中,当您关闭窗口或点击链接“e”对象看起来相同。 有什么方法可以确定铬中的目标?

回答

0

否。活动的目标是窗口或文档,而不是链接。与Firefox不同,Chrome在事件对象上没有提供有用的奖励属性。你最好的选择可能是在检查事件目标的主体上有一个单击事件处理程序,以查看它是否是链接,但这不是万无一失的:链接可能有其自己的单击事件处理程序来阻止默认操作,或者用户可能按照使用键盘的链接,在这种情况下,不会触发点击事件。

+0

就像我怀疑。谢谢! – ZooKeeper 2010-02-01 13:47:46

5

晚回应,我知道,但你总是可以试试这个(确认工作在IE):

target = document.activeElement; 
alert(target.href); 

只是显示你,你可以抓住的有源元件,然后就解析HREF弄清楚什么正在发生。

+0

*不*在Safari中工作! – 2015-12-04 12:27:59

2

另一种选择:

$("a").on("click", function(){ 
    window.last_clicked = $(this); 
}); 

然后简单地从你的onbeforeunload处理程序中是指last_clicked。这是我发现的最好的跨浏览器兼容解决方案,因为document.activeElement是不可靠的。

+0

添加一个计时器可以让你更确定地确定它确实是一个点击。请参阅:http://stackoverflow.com/a/25037876/1784062 – joost 2014-07-30 13:19:43

+0

@joost酷。感谢您的链接。 – 2014-07-30 15:44:26