ユーザーがブラウザーウィンドウを閉じたとき、またはページを更新したときに、最終的なJavaScriptコードを実行する方法はありますか?
onloadに似ていますが、oncloseのようなものを考えていますか?ありがとう。
onbeforeunloadメソッドは好きではありません。これは常に確認ボックスがポップアップ表示される(ページを離れる/ mozillaにとどまる)または(リロード/ chromeにリロードしない)です。コードを静かに実行する方法はありますか?
ユーザーがブラウザーウィンドウを閉じたとき、またはページを更新したときに、最終的なJavaScriptコードを実行する方法はありますか?
onloadに似ていますが、oncloseのようなものを考えていますか?ありがとう。
onbeforeunloadメソッドは好きではありません。これは常に確認ボックスがポップアップ表示される(ページを離れる/ mozillaにとどまる)または(リロード/ chromeにリロードしない)です。コードを静かに実行する方法はありますか?
回答:
そこの両方であるwindow.onbeforeunload
とwindow.onunload
ブラウザに応じて異なる使用されています、。ウィンドウのプロパティを関数に設定するか、次のように使用して、それらを割り当てることができます.addEventListener
。
window.onbeforeunload = function(){
// Do something
}
// OR
window.addEventListener("beforeunload", function(e){
// Do something
}, false);
通常、onbeforeunload
ユーザーがページを離れることを停止する必要がある場合に使用されます(たとえば、ユーザーは保存されていないデータで作業しているため、離れる前に保存する必要があります)。私の知る限り、はOperaでonunload
サポートされていませんが、いつでも両方を設定できます。
さて、私はこれのための実用的な解決策を見つけました、それはbeforeunload
イベントを使用してからハンドラーをreturnにすることで構成されていnull
ます。これにより、確認ボックスがポップアップすることなく、必要なコードが実行されます。それはこのようなものになります:
window.onbeforeunload = closingCode;
function closingCode(){
// do something...
return null;
}
お役に立てれば。
return false;
は同じことをする(つまり、デフォルトの動作を妨げる)と思い、より意味的に正しいです。
ユーザーがページを離れたことをサーバーに知らせたい場合があります。これは、たとえば、サーバーに一時的に保存されている未保存の画像をクリーンアップしたり、そのユーザーを「オフライン」としてマークしたり、セッションが終了したときにログを記録したりするのに役立ちます。
beforeunload
これまでは、関数でAJAXリクエストを送信していましたが、これには2つの問題があります。非同期リクエストを送信した場合、リクエストが正しく実行される保証はありません。同期リクエストを送信すると、信頼性は向上しますが、リクエストが完了するまでブラウザはハングします。これが遅い要求である場合、これはユーザーにとって非常に不便です。
幸いなことに、私たちは今持っていnavigator.sendBeacon()
ます。このsendBeacon()
メソッドを使用することにより、ユーザーエージェントがアンロードを遅延したり、次のナビゲーションのパフォーマンスに影響を与えたりする機会がある場合、データは非同期でWebサーバーに送信されます。これにより、分析データの送信に関するすべての問題が解決されます。データは確実に送信され、非同期に送信され、次のページの読み込みに影響を与えません。以下にその使用例を示します。
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
でサポートされています:
それは現在サポートされていません:
サポートされていないブラウザのサポートを追加する必要がある場合のsendBeacon()のポリフィルは次のとおりです。ブラウザでメソッドが使用できない場合、代わりに同期AJAXリクエストが送信されます。
http://example.com/script.php?token=something&var1=val1&var2=val2
値を入れるなど、リクエストを送信できないようなものはありません。
ここのドキュメントでは、onbeforeunloadイベントをリッスンすることや、ウィンドウにイベントリスナーを追加することを推奨しています。
window.addEventListener('beforeunload', function(event) {
//do something here
}, false);
また、ウィンドウの.onunloadプロパティまたは.onbeforeunloadプロパティに関数または関数参照を設定することもできます。
動作はブラウザー間で標準化されていませんが、関数は、ページを離れるかどうかを確認するときにブラウザーが表示する値を返す場合があります。