2010-11-08 86 views
38

看起來Apple已禁用iOS設備(iPhone,iPad,iPod Touch)的window.onbeforeunload事件。不幸的是,我找不到任何文檔說明爲什麼這個事件在Mobile Safari中不起作用。有沒有什麼辦法可以在Mobile Safari for iOS設備上使用window.onbeforeunload?

有誰知道是否有此功能的可靠的替代? Android的瀏覽器似乎支持它,Safari桌面應用程序也支持onbeforeunload事件。

+0

這是[window.onbeforeunload不工作的重複iPad的?](http://stackoverflow.com/questions/3239834/window-onbeforeunload-not-working-on-the-ipad) – 2013-08-07 12:06:42

回答

1

如果你真的需要它,你不能只得到有一個處理程序更改URL,並讓那些等待,直到你完成你想要的所有鏈接,表格和DOM對象。 對於鏈接,你讓他們通過的getElementsByTagName,檢查是否在href與任何東西,但#開頭,只是添加您的onbeforeunload功能的onclick增加(在href的看着面前的將被調用)。 同樣的形式,但與onsubmit。 而finaly,改變使用JavaScript的HREF元素,你應該確保當您添加您致電onbeforeunlaod功能lsitener(或者,如果你使用DOM0或DOM1監聽器,你可以添加一些類,然後使用一個全局腳本,用類檢查所有元素,並用閉包將其添加到事件偵聽器中。

但是,您應該通常能夠避免使用此事件(可能使用cookie來存儲您希望每隔x秒,並允許在最壞的情況下在用戶下次加載頁面時查看它,並且最好能夠在onbeforeunload或onunload上發送Ajax請求,即使它僅發送http頭部,woudl讓你得到你想要的)

+0

謝謝Xavier,所有的可能性,但這些都需要大量的DOM修改,其中我的應用程序的情況是不切實際的,因爲它可能會干擾託管頁面的功能。 – 2011-04-30 06:37:24

+0

您不需要在每個鏈接上添加事件等等,您可以使用事件委派。你可以把一個放在body上並使用e.srcElement || e.target,然後檢查它是否會更改網址。這樣,你不需要放置那麼多元素。但是,你可能仍然需要將自己提交的表單提交給... ...不確定。 – xavierm02 2011-04-30 10:04:04

+1

用戶實際關閉頁面的場景的任何選項,而不是通過元素移動到另一個頁面? – 2014-08-11 20:46:14

13

我看到這是一個老問題,但我最近面臨這個問題。

我使用window.unload,它在IOS的瀏覽器工作正常(雖然如果你看Apple documentation它似乎被棄用,他們建議使用document.pagehide

+1

爲'document.pagehide'提示+1。正是我需要的! – 2014-11-05 08:14:45

+5

當用戶重新加載頁面時,頁面隱藏和卸載似乎都不能在iOS 9上工作。 – CpnCrunch 2016-08-02 22:35:38