如何获取 onbeforeunload 事件的目标 URL?

72

我已经搜索了几个小时,但是我找不到这个问题的解决方案。

window.onbeforeunload = warn;

这个不起作用:

function warn (e) 
{ 
   var destination = e.href;
   alert(destination );
}

好的,为了澄清事情。如果用户在页面上单击链接,那很容易,因为您可以将事件处理程序添加到所有链接的onclick事件中。但是,我想捕获用户在浏览器地址栏中输入的地址。


我在处理数据处理网站的工作,在用户离开页面之前,我会确保所有的数据都符合要求。onbeforeunload事件非常有用,但由于浏览器的处理方式,它也很繁琐。我无法阻止用户离开页面,但是知道他们将去哪里会很好。恰好在我的情况下,我知道这是一个由网站生成的重定向,所以我可以设置一个会话变量。 - user913227
3个回答

74

因为这是不可能完成的。新位置是私人/敏感信息。 当用户离开你的网站时,没有人希望你知道他们访问了哪些网站。


2
我认为你理解错了问题,如果是在自己网站上访问页面,为什么要使用 onbeforeonload?这没有任何意义。Misnyo,你可以澄清一下你的具体需求吗? - Michel van Engelen
2
@MichelvanEngelen - 因为也许您想要触发一个CSS加载屏幕,让用户知道他正在准备导航到某个地方,确实点击了一个链接并且正在发生某些事情(这会使网站感觉更具响应性,特别是当导航到另一个页面需要一些时间时)。 - jbyrd
1
@jbyrd,可能吧!但是我觉得加载器应该属于目标页面,而不是我们从中导航的页面。这样可以更好地控制,现在我们经常只是呈现外壳并通过AJAX请求等方式加载数据。 - Michel van Engelen
1
@MichelvanEngelen - 这是一个有趣的考虑。实际上,我的团队中的另一个人最初建议了这种行为,而不是我。当他第一次提出时,我有点担心,特别是因为我之前没有真正见过它。但是团队的其他成员喜欢它,而且我想不出任何重大问题,所以我们采用了它。 - jbyrd
您可以通过使用此 document.activeElement.href 获取目标 URL。 - Kalpesh Dabhi
显示剩余2条评论

39

如果你只想查看链接的目标地址,你可以使用:

document.activeElement.href 

但是获取地址栏目的目标地址是不可能的。

我听说过一些解决方案,如果鼠标移动到地址栏上会触发一个事件(来警告用户还有未完成的进程没有处理),但我绝不会采用这种hack手段。


19

Kaze的回答是一个有趣的方法,但当页面从焦点导航到其他位置时,观察元素焦点并不是非常可靠。部分原因是在链接点击和导航离开页面之间存在一定的延迟(在此期间用户可能将焦点移动到其他元素上),但也因为链接可能会被聚焦(例如通过键盘控制或鼠标按下而未单击)而没有实际用于导航离开页面。因此,如果您将焦点集中在链接上,然后关闭窗口,它会认为您正在遵循该链接。

对于页面上的每个链接(加上每个表单的onsubmit)捕获onclick略微更加可靠,但由于延迟仍然可能会被欺骗。例如,您单击链接,但在新页面开始加载之前点击了返回按钮(或按下Esc键)。同样,如果您关闭窗口,它会认为您正在遵循该链接。

我想捕捉地址,即用户在浏览器的URL框中输入的内容。

这永远不可能发生。这是明显的隐私问题。


12
为什么你这样做?如果你的回答不完全正确,不要担心,人们有机会通过投票来评判。但它仍然可以对其他人有用。我希望看到你的“最后关注”方法。 - cprcrack
同意 - @KazenoKoe 请重新添加您的答案! - Shane N
7
噢,拜托了,你不能期望人们把“踩”作为中立的同行评审来看待,当你在其周围制造了这么多花里胡哨的东西时。他们故意试图将其与求职等事情联系起来。每个人都会犯错误,但如果有必要,您真的只需在简历上展示最精彩的部分。;-) - Mantriur
嘿嘿,@某人,是的:“如果你的答案不完全正确,不用担心,人们有机会通过投票来评判它。” 太搞笑了!... :D - Sz.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接