イベントを追加するには、セッターattachEvent
の代わりに置き換えます。onunload
IE6 - 8 でテストしましたが、問題なく動作します。addEventListener
IE9+ およびその他のブラウザーにも使用していることを確認してください。
var unloadFunc = function () { test(); };
if (childWindow) { // null if a pop-up blocker does not create the window
if (childWindow.addEventListener) {
childWindow.addEventListener('unload', unloadFunc, false);
} else {
childWindow.attachEvent('onunload', unloadFunc);
}
}
明らかに、URL が別のドメインからのものである場合、これは機能しません。別のオリジンのウィンドウが閉じ
られたときに関数を実行する場合は、またはを使用して boolean プロパティの値をポーリングします。窓が閉まっているときは真です。setInterval
setTimeout
childWindow.closed
例えば:
if (childWindow) { // null if a pop-up blocker does not create the window
setTimeout(function checkState() {
if (childWindow.closed) {
// onunload Logic here.
} else {
setTimeout(checkState, 250);
}
}, 250);
}
注:beforeunload
イベントを使用することが提案されている他の回答。仕様では、実装がこのイベント中にconfirm
、alert
、prompt
および呼び出しを無視できることに注意してください。showModalDialog