2011-08-01 25 views
24

onbeforeunloadとonunloadの違いは何ですか? また、iPadに関連する特定の質問があります。ページが閉じられたときにアラートを表示しようとしているページ(myPage.html)があります(つまり、XがiPadのタブを閉じるために押されています) )onbeforeunloadとonunloadの違い

今、私はwindow.onunloadとwindow.onbeforeunloadの両方を使ってみました。 以下はiPadでの私の発見です。ユーザーがmyPage.html異なるページ(いずれかのいくつかのリンクをクリックするか、myPage.htmlの中にGoogle検索を行うことによって)に移動したときに

  1. window.onunloadを使用して、私は警告を取得することができています。しかし、最小化されたビュー(X)からタブを閉じると何も起きません。

  2. window.onbeforeunloadを使用すると、ユーザーがmyPage.htmlから別のページに移動した場合でも、 X)を表示します。

この問題を解決する別の方法があるかどうかを知りたかったですか?

ありがとうございます。

答えて

12

onunloadは、ページが閉じられたときに命令を実行する責任があります。また、IEとAJAXで問題が発生します。彼らはそれを修正したかどうかわからない、しかし - それは、ウィンドウの実際の決算との競争で実行されないとonunload

前にトリガされますので、

onbeforeunloadは、私はOperaはonbeforeunloadを認めていないために使用される知っている方が効率的です私は常に安全であるとの両方のリスナーを登録します。

window.onunload = window.onbeforeunload = (function(){... 
+4

Thxはそれをたくさん...しかし、iPadの実装についての任意のアイデア? – testndtv

+16

window.onunload = window.onbeforeunload =(function(){...、両方のイベントにブラウザに問題がない場合は、関数を2回実行します) – noboundaries

16

は両方のイベントをサポートするブラウザでの二重の呼び出しを避けるために、AlienWebguyのANSを追加、

5

onbeforeunload:アンは、あなたがevent.preventDefault();

  • または非空値(すなわち値を返すことを使用して、ページの閉鎖を解除することができる
  • MDN tells meを開始する前に呼び出され

    • != 0)、ページは、ユーザーがMDNもオペラ12言うと、支持onbeforeunloadアップ
    • 近くをキャンセルするかを選択することを可能に確認ダイアログをポップアップ表示されます - その、今しばらくの間、それをサポートするよう

    に見えますonunloadは:アンロード後に呼び出さ

    • 始めますが、任意のリソース解放前(正確には、この期間中に行われているものを私にその明確ではない)してい
    • このPの近くにページをキャンセルする
    • その遅すぎますあなたのonunloadコードは、いくつかのかなりの時間を要する可能性があり、ユーザーは閉じたままハングアップウィンドウを表示したくないところOINT私はあなたがonbeforeunloadonunloadを使用する理由を考えることができ

    唯一の理由は次のようになります。

  • 7

    onbeforeunloadonunloadとの間の1つの大きな相違点(キャンセル可能性を除く)は、前者がダウンロードリンクのためにトリガされ、後者がそうでないことです。例:<a href="https://somewhere.com/thething.zip">download</a>onbeforeunloadハンドラを起動しますが、onunloadは起動しません。

    +4

    これはChromeで再現できません。 –

    関連する問題