2011-12-02 165 views
2

假设我的网页上有任意数量的附有事件处理程序的元素,比如说onclick。在处理程序中,触发卸载事件,例如通过分配window.location拦截JavaScript卸载事件

任务:我需要检测一个事件处理程序是否会卸载页面。我怎样才能添加另一个拦截卸载事件并将其存储在变量中而不是触发它的事件处理程序?

更新

下面是一个explenation,由于混淆。我编写了一个使用Selenium 2的Java应用程序来提取有关用户事件的所有信息。除卸载外,这很容易完成。在我终于可以卸载页面之前,我必须等待拉。

+0

因此,用户点击元素,相应的onclick事件处理程序更改'window.location',然后...你想要发生什么? “拦截卸载事件”是什么意思,是否要防止页面卸载?我不明白在这种情况下可以“在变量中存储[d]”。 – nnnnnn

+0

是的,我想阻止该页面卸载。事件对象应该存储在一个变量中。 – Alp

+0

但是,如果您不希望页面实际卸载,您为什么要通过更改'window.location'来导致页面卸载的代码?你明白我为什么困惑吗?你为什么要存储事件对象 - 你打算如何处理它?也许你可以更新你的问题来解释这将如何从用户的角度来看... – nnnnnn

回答

2

,如果你需要,以防止页面卸载看到这个帖子: How do I stop a page from unloading (navigating away) in JS?

如果您需要跟踪页面卸载,您可以window's unload event期间做出synchronous xhr request (tip set async=false)(你的页面将不会退出,直到该请求完成)

如果您需要跟踪哪些自定义事件处理程序卸载页面,则必须跟踪当前事件处理程序,然后执行上述解决方案之一。

+0

谢谢。我不想使用'onbeforeunload',因为对话框不能被自动确认(或者可以吗?据我所知Selenium 2不可能)。 ajax请求的想法是有趣的,但我没有一个web服务器运行,但我的应用程序,并希望我不需要它。 – Alp

0

当页面被卸载时,body的onunload处理函数将被调用。所以你可以创建一个javascript方法将其存储在一个变量中。

例如: onunload =“yourMethod();”

+0

据我所知,卸载事件是“不可阻挡的”,所以我需要做一些事情之前,发生 – Alp