1

unload親ウィンドウで開かれた子ウィンドウでJavaScriptを実行したい。以下のコードを試しましたが、関数を呼び出していません。

 childWindow = window.open(url, 'MyWindow', GetWindowOptions(1020, 600), true);
 childWindow.onunload = function () { test(); };

そして、私が書いたテスト関数は次のとおりです。

function test() {
alert(1);
}

IE8ブラウザを使用しています。

4

2 に答える 2

7

イベントを追加するには、セッターattachEventの代わりに置き換えます。onunloadIE6 - 8 でテストしましたが、問題なく動作します。addEventListenerIE9+ およびその他のブラウザーにも使用していることを確認してください。

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 プロパティの値をポーリングします。窓が閉まっているときは真です。setIntervalsetTimeoutchildWindow.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イベントを使用することが提案されている他の回答。仕様では、実装がこのイベント中にconfirmalertpromptおよび呼び出しを無視できることに注意してください。showModalDialog

于 2012-08-03T12:21:59.410 に答える
0

で何かを試すことができますonbeforeunload。印刷されたことを示すために AJAX 呼び出しを行うイントラネット アプリの印刷レポートで、次のようなものを使用します。

if (window.onbeforeunload) {
    window.onbeforeunload = function() { didPrint(someData); };
} else {
    window.onunload = function() { didPrint(someData); };
}
于 2012-08-03T12:15:49.653 に答える