2011-09-16 31 views
4

iPad Safariのonunloadイベントとonbeforeunloadイベントに問題があるため、上に列挙したiPad(pagehide)と同等の問題が見つかりました。今、私の質問があるiPad Safariのonpagehideイベント

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

。 1. pagehideはアンロード前またはアンロード前のイベントをアンロードするのに適していますか? 2.このpagehideイベントハンドラ内でDWR呼び出し(簡単に言えば、AJAX呼び出し)を使用しています。ここで

someObj.saveData(jsonString,{async:false}); 

SaveDataを()は、実際にデータを保存したJava機能..です 今...私はアンロードイベントにデータを保存するために「悪い習慣」であることを理解してくださいしてください...しかし、これは私のアプリケーションに既存のコード化されていると私はそれを変更することはできません..

私の質問はどのように振る舞うだろう...のようにバックグラウンドで実行されるように、どのポイントでそれを呼び出すのでしょうか?

答えて

3

beforeunloadおよびunloadは、アクティブページが壊れているとき、ページが離れている、ブラウザが閉じているときに発生します。

pagehideはアクティブなページが「一時停止」されている場合に発生します。ディスク。

ページが中断されている間にブラウザを閉じると、beforeunloadイベントまたはunloadイベントを受信しないことがあります。

pagehideは、ブラウザメーカーが中断し、(代わりにそれらを再ロードする)キャッシュにページを再開しようとしていたので紹介しますが、彼らはunloadイベントを呼び出したときに、多くのページからページを妨げる破壊的な行動を取ることが判明しました後で再開される。だから彼らはpagehideと似たようなものだったが、別のものだった。

私は

私はそれについてはよく分からないアンロードイベントにデータを保存するために「悪い習慣」であることを理解しない...それは上の同期要求をする悪い習慣ですunloadこれは、ユーザーがウィンドウを閉じようとしているときにブラウザが応答を待つためです...しかし、私はsend-and-forget非同期保存要求は問題ではないと思います。

私の質問はどのくらい正確に振る舞いますか...ページがアンロードされている間、バックグラウンドで実行されているように、どのポイントでページビッドの場合にも呼び出されますか? beforeunloadまたはunloadから呼び出さ

Javascriptコードは、一般的に、それが閉じられる前に、ページ上で実行するスクリプトの最後の断片です。そのため、サーバーからの応答が必要な場合は、同期要求が唯一のオプションです(そうしないと応答は処理できません)。イベントが完了すると、そのページは破棄されます。 pagehideイベントは似ていますが、ページが破棄されるのではなく、シリアル化されてどこかに保持されるため、後でロードして再開することができます。

このことから、pagehideイベントのオブジェクトを破棄するなどの「クリーンアップ」ロジックを実行しないでください。彼らはpagehideイベントを構築したところ

詳細はWebKitのチームからこのブログの記事で見つけることができます: WebKit Page Cache II – The unload Event

関連する問題