web-dev-qa-db-ja.com

JavaScriptでポップアップウィンドウの閉じるイベントをキャプチャする

ポップアップウィンドウの前に何らかのアクションを実行する必要があります(window.open)閉じます。

次のようなものが良いでしょう:

var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}

どうすればそれを達成できますか?

55
xiaohan2012

あなたの例は動作しますポップアップウィンドウのURLが親と同じドメインにある限りページで、イベントをすべて小文字に変更します:

var new_window = window.open('some url')
new_window.onbeforeunload = function(){ /* my code */ }
76
glortho

受け入れられた答えは同じ起源に対して正しいですが、クロスオリジンポップアップの解決策を見つけました:

var win = window.open('http://www.google.com'); 
var timer = setInterval(function() { 
    if(win.closed) {
        clearInterval(timer);
        alert('closed');
    }
}, 1000);

ソース: atashbahar.com

それを使用することを検討している人のために。

Facebookでさえ Javascript SDK でこの「ハック」を使用しています。

これを確認するには、コードを見てください。 https://connect.facebook.net/en_US/sdk.js.closedを検索するだけです。

38
Dustin Hoffner

イベント名はonbeforeunloadではなくonBeforeUnloadです。 JSでは大文字と小文字が区別されます。

13
valentinas

onbeforeunloadイベントを開いた後、ウィンドウにバインドする必要があります。

これを行う最も簡単な方法は、javascript onbeforeunloadコードをウィンドウのソースコード内に含めることです。

詳細な説明については、これら2つの非常によく似た質問 here とStackoverflowの here を参照してください。

5
cale_b

上記のように、onbeforeunloadイベントをウィンドウにバインドする必要がありますafter

他のスレッドの例を参照してください: https://stackoverflow.com/a/25989253/578275

1
var new_window = window.open('some_url')

new_window.windownullです。ただし、setTimeoutまたはsetInterval関数を使用して手動で確認する必要があります。

これは、同じドメインにいないときに確認する唯一の方法です。

0
Petr Odut