2011-12-02 167 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