1. ホーム
  2. javascript

javascriptでポップアップを開き、ユーザーがそれを閉じたときに検出することは可能ですか?

2023-09-04 02:43:49

質問

質問はタイトルにかなり込められています。

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);