2012-03-12 15 views
1

フォームの本体にonunloadメソッドが記述されています。ページには大量のコンテンツがサーバーからストリーミングされるため、フォーム全体をダウンロードするにはしばらく時間がかかります。フォームがブラウザにダウンロードされている間に、ユーザーがウィンドウの閉じるボタンをクリックすると、アンロードイベント(フラグをリセットするためのサーバーサイドアクションを呼び出すために書き込まれたイベント)がトリガされないことがあります。アンロードメソッドはページの終わりに向かって書かれていますが、これが理由ですか?私たちはオンロードが確実に呼び出されることを保証することができますか?IEで常にHTMLページのアンロードが呼び出されない

+0

私の過去の経験から、onunloadイベントはあなたが望む限り、実行することは保証されていません。コードが終了する前に次のページが読み込まれると、それが完了することはありません。アプリケーションに応じて、アラートや確認のプロンプトを表示してコードを実行する時間を与えることができます。 – GoldenNewby

答えて

0

2つの理由があります。 1つは、あなたが言ったように、ブラウザは、アンロードに達していないかもしれないので、あなたはあなたのbodyタグの上に宣言する必要があります。

もう1つは、GoldenNewbyが既に述べたように、アラートなど、コードを終了するまでに時間を要するということです。これは、次のページの準備が整うとJavaScriptがメモリから消去され、実行が単に古いスクリプトで停止されるためです。スクリプトがページの読み込みよりも時間がかからないようにするには、アラートは必要ありませんが、実行に2ms以上かかることがある場合は、時間を購入する必要があります。

0

IEにはonbeforeunloadイベントがありますが、代わりにそのイベントを使用できます。 onbeforeunloadが既に実行した場合は、onunloadが早期に終了できるようにフラグを設定してください。あなたを打つ

window.onunload = window.onbeforeunload = function() { 
    if (window.isAlreadyUnloaded) return; 
    window.isAlreadyUnloaded = true; 
    // do your stuff here. 
} 
1

事は、おそらくwindow.onloadがまだ解雇されていない場合、IEはアンロードイベントを発生しないという事実です。ソリューションはこのブログの記事で説明されています:http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/

+0

注:ブログ記事に記載されているonstopイベントは、IEの最新バージョン(少なくとも10と11)では同じように動作しません。 onloadイベントの前にページを移動(またはリフレッシュ)すると起動しません。私にとっては、実際の解決策はハンドラをonloadだけでなくonbeforeunloadイベントにバインドすることでした。 –

関連する問題