0

新しいウィンドウを開く Web サイトがあります。子ウィンドウでイベントをトリガーしようとしてoncloseいます (ユーザーがウィンドウを閉じた場合、親ウィンドウが警告します)。

その問題に関するスタックオーバーフローの質問を見つけました:子ウィンドウが閉じたときに親ウィンドウの機能を実行する方法は?

しかし、答えは子ウィンドウでのアクションも実行しますが、子ウィンドウは自分の制御下にないWebサイトを開くため、実行できないと思います(そのhtmlを編集できません)。

以下を使用してon closeイベントをトリガーすることを考えていました

var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });

$(window).bind("beforeunload", function() { 
    return inFormOrLink;
})

これを新しいタブ/ウィンドウに適用するにはどうすればよいですか?

4

2 に答える 2

0

私が探していたものの解決策を見つけました。上記の答えに加えて、実際に機能し、私が探していたものよりもはるかに簡単でした。

var win = open('http://www.google.com');
if (win.closed) {
    alert('Window closed! Hoorah!');
}

助けてくれた人に感謝します。

于 2012-09-12T04:50:06.957 に答える
0

これは、クライアント側だけで行うことはできません。これを行うには、次のことを行う必要があります。

  • タブを開くと、2 番目の ajax 呼び出しを受信するまでロードを停止しないスクリプトに ajax 呼び出しを送信します。これは通常、SQL 値が存在するのを待ってから出力するスクリプトで行われます。
  • タブを閉じたら、そのスクリプトに 2 番目の ajax 呼び出しを送信して、元の ajax 呼び出しに応答するようにします。

ビオラ。

これを行う簡単な方法を知りません。

元のウィンドウ:

function waitForTabClose(windowID) {
    $.post('waitfortabclose.php',{windowID:windowID},function(data) {
        if (data == 1) { 
             // Do tab closed stuff
        } else {
            waitForTabClose(windowID);
        }
    });
}

waitfortabclose.php

$i=1;
$wID = $_POST['windowID'];
do {
    if (file_get_contents($wID) == $wID) {
        echo 1;exit;
    }
    set_time_limit(30);
    sleep(5);
} while($i++ < 50);
echo 0;

新しいタブ

window.onclose = function() {
    $.post('windowclosed.php',{windowID:windowID);
};

windowclosed.php

$wID = $_POST['windowID'];
file_put_contents($wID,$wID);

これは疑似コードであり、テストされていません。機能はさまざまな方法で記述できますが、これはまさに私が行う方法です。

于 2012-09-12T01:47:53.637 に答える