フォームの本文に onunload メソッドが書かれています。このページはサーバーから大量のコンテンツをストリーミングするため、フォーム全体をダウンロードするのに時間がかかります。フォームがブラウザーにダウンロードされている間に、ユーザーがウィンドウの閉じるボタンをクリックすると、アンロード イベント (サーバー側のアクションを呼び出してフラグをリセットするように記述されている) がトリガーされないことがあります。unload メソッドがページの最後の方に書かれていますが、それが理由ですか? onunload が確実に呼び出されるようにする方法はありますか?
3 に答える
おそらく、window.onload がまだ発生していない場合、IE は unload イベントを発生させないという事実に驚かされることでしょう。解決策は、次のブログ投稿で説明されています: http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/
理由は 2 つあります。1つは、あなたが言ったように、ブラウザがアンロードに到達していない可能性があるため、bodyタグの上で宣言する必要があります.
もう 1 つは、GoldenNewby が既に述べたように、アラートなど、コードが終了するまでの時間を与える必要があることです。これは、次のページの準備ができた瞬間に JavaScript がメモリからクリアされ、古いスクリプトで実行が停止されるためです。スクリプトがページの読み込みよりも短い時間で済むことを保証できる場合、アラートは必要ありませんが、実行に 2 ミリ秒以上かかる可能性がある場合は、時間を稼ぐ必要があります。
IEにはonbeforeunload
イベントがあり、代わりにそれを使用できます。フラグを設定して、すでにそのことを行っているonunload
場合に早期に終了できるようにします。onbeforeunload
window.onunload = window.onbeforeunload = function () {
if (window.isAlreadyUnloaded) return;
window.isAlreadyUnloaded = true;
// do your stuff here.
}