問題はほとんどタイトルにあります。
Javascriptでポップアップを開き、ユーザーがいつ閉じたかを検出することは可能ですか?
私はプロジェクト内でjqueryを使用しているので、jqueryソリューションが良いでしょう。乾杯!
ポップアップの内容を制御できる場合は、そこでウィンドウのunload
イベントを処理し、opener
プロパティを介して元のウィンドウに通知し、最初にオープナーが閉じられたかどうかを確認します。これはOperaで常に機能するとは限らないことに注意してください。
window.onunload = function() {
var win = window.opener;
if (!win.closed) {
win.someFunctionToCallWhenPopUpCloses();
}
};
unload
イベントは、ユーザーがウィンドウを閉じたときだけでなく、ポップアップのページから離れるたびに発生するため、ポップアップがsomeFunctionToCallWhenPopUpCloses
で実際に閉じたことを確認する必要があります。
var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
window.setTimeout(function() {
if (popUp.closed) {
alert("Pop-up definitely closed");
}
}, 1);
}
ポップアップのコンテンツを制御できない場合、またはターゲットブラウザーのいずれかがunload
イベントをサポートしていない場合、メインウィンドウのポーリングソリューションの種類に制限されます。間隔を調整してください。
var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
if (win.closed !== false) { // !== is required for compatibility with Opera
window.clearInterval(pollTimer);
someFunctionToCallWhenPopUpCloses();
}
}, 200);
問題に対する非常に簡単な解決策があります。
まず、次のようなポップを開く新しいオブジェクトを作成します。
var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');
このポップアップウィンドウがいつ閉じられるかを知るには、次のようなループでこれをチェックし続ける必要があります。
var loop = setInterval(function() {
if(winObj.closed) {
clearInterval(loop);
alert('closed');
}
}, 1000);
これで、アラートを任意のJavaScriptコードに置き換えることができます。
楽しむ! :)
unload
および beforeunload
ウィンドウイベントを調べてみてください。これらを監視すると、次のような方法でウィンドウが閉じられたときにDOMがアンロードされたときにコールバックする機会が与えられます。
var newWin = window.open('/some/url');
newWin.onunload = function(){
// DOM unloaded, so the window is likely closed.
}
jQuery UIダイアログ を使用できる場合、実際にはclose
イベントがあります。
新しいウィンドウ呼び出しを開くには:
var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");
そのウィンドウがいつ閉じるかを知りたい場合は、onunload
を使用します。
wnd.onunload = function(){
// do something
};
を閉じる前にユーザーからの確認が必要な場合は、onbeforeunload
を使用します。
wnd.onbeforeunload = function(){
return "are you sure?";
};
仕事中の私のプロジェクトの1つでこれを行います。
トリックは、ポップアップが閉じられたときに呼び出す予定の親ページにJS関数を追加し、ポップアップでアンロードイベントをフックすることです。
window.opener
プロパティは、このポップアップを生成したページを参照します。
たとえば、元のページでcallingPageFunction
という名前の関数を作成した場合、次のようにポップアップから呼び出します。
$(window).unload(function() {
window.opener.callingPageFunction()
});
2つのメモ:
私が現時点で考えることができる唯一の方法は、10秒後に自分自身を呼び出すタイムアウトを含む親ページに関数を作成することです。関数では、Cookieの値をチェックして、それがtrueかfalseかを確認することもできます。ポップアップウィンドウが閉じたら、Cookieをtrueに設定します。
お役に立てれば。
はい、ポップアップウィンドウのonbeforeUnloadイベントを処理してから、次を使用して親ウィンドウで関数を呼び出します。
window.opener.myFunction()