web-dev-qa-db-ja.com

子ウィンドウが閉じたときに親ウィンドウの機能を実行する方法は?

Javascript window.open()関数を呼び出して、ポップアップで別のURLをロードしています。ユーザーが終了すると、window.close()関数を呼び出すウィンドウを閉じるというリンクがある最後のページに移動します。そのページが閉じたら、ウィンドウを開いた元のページの何かを更新する必要があります。これを行う方法はありますか?元のページにある関数を呼び出す必要があります。

40
ngreenwood6

あなたは何とかこれを試すことができます:

生成されたウィンドウ:

window.onunload = function (e) {
    opener.somefunction(); //or
    opener.document.getElementById('someid').innerHTML = 'update content of parent window';
};

親ウィンドウ:

window.open('Spawn.htm','');
window.somefunction = function(){

}

親でこれを行うべきではありません。そうしないとopener.somefunction()は動作しません。window.somefunctionを実行するとsomefunctionがpublicになります:

function somefunction(){

}
58
jerjer

おそらく ' onbeforeunload 'イベントを使用する必要があります。子ウィンドウが閉じる直前に、子から親ウィンドウの関数を呼び出すことができます。

だからおそらく次のようなもの:

window.onbeforeunload = function (e) {
    window.parent.functonToCallBeforeThisWindowCloses();
};
9
Darrell Brogdon

これは古い投稿ですが、これを行うには別の方法を追加すると思いました。

var win = window.open("http://www.google.com");

var winClosed = setInterval(function () {

    if (win.closed) {
        clearInterval(winClosed);
        foo(); //Call your function here
    }

}, 250);

内容を変更したり、子ウィンドウのイベントハンドラーを使用したりする必要はありません。

8
user3886234

答えとしては、生成されたウィンドウにコードを追加する必要があります。それは不必要な結合です。

// In parent window
var pop = open(url);
pop.onunload = function() {
  // Run your code, the popup window is unloading
  // Beware though, this will also fire if the user navigates to a different
  // page within thepopup. If you need to support that, you will have to play around
  // with pop.closed and setTimeouts
}
4
Juan Mendes

私はこの投稿が古いことを知っていますが、これは本当にうまくいくことがわかりました:

window.onunload = function() {
    window.opener.location.href = window.opener.location.href;
};

window.onunload partは、このページをグーグルで見つけたヒントです。ありがとう、@ jerjer!

0
Sablefoste

Jerjer answer(top)とともに、親ウィンドウと子ウィンドウの両方が外部または内部の両方ではない場合があり、openerが未定義の問題が発生し、親ページのプロパティにアクセスできません。 window.opener is undefined Internet Explorerで

0
yesh