2

Web ページにメイン ウィンドウ (#1) があり、そこから新しいブラウザ ウィンドウ (#2) を開き、そこから新しいウィンドウ (#3) を開きます。

ユーザーが window#3 の前に window#2 を閉じると、window#3 が wi​​ndow.opener で関数を呼び出せなくなるという問題が発生します。

私がやりたいのは、window#2 が閉じるときに window#3.opener を window#1 に設定することです。

私はこれをwindow#2でやろうとしました(私はjqueryを使用しています):

var children = [];
$(window).unload( function( ) {
    $.each( children, function( p, win ) {
        if ( win ) {
            win.opener = window.opener;
            }
    } );
} );

window#3 がロードされたら、window#2 の配列 children にそのウィンドウを追加します。

ただし、window#2 が wi​​ndow#3 の前に閉じられている場合でも、windows#3 の window.opener は window#1 を指していません。

ウィンドウ #2 を閉じた後も、孫ウィンドウ (ウィンドウ #3) がメイン ウィンドウ (ウィンドウ #1) を呼び出せるようにするにはどうすればよいですか?

4

5 に答える 5

3

3番目のウィンドウに次を入力します:

<script type="text/javascript">
  var grandMother = null;
  window.onload = function(){
    grandMother = window.opener.opener;
  }
</script>

したがって、祖母ウィンドウへのハンドルがあり、それを直接何にでも使用できます。

if(grandMother)
      grandMother.document.getElementById("myDiv").firstChild.nodeValue ="Greetings from your grandchild !-";
于 2008-10-27T15:23:34.500 に答える
1

3 番目のウィンドウが開いたら、メイン ウィンドウへの参照を作成する必要があります。

parent = window.opener.opener

これは、2 番目のウィンドウを閉じても存続します。

于 2008-10-27T15:27:06.427 に答える
0
var main_window = get_main_window();
function get_main_window(){
    var w = window;
    while(w.opener !== null){
        w = w.opener;
    }
    return w;
}
于 2016-11-08T15:33:31.837 に答える
0

window.openerおそらく読み取り専用です。孫がロードされたときに祖父母を参照するように独自のプロパティを設定します。

function onLoad() {
  window.grandparent = window.opener.opener;
}
于 2008-10-27T15:19:54.290 に答える
0

これは接線かもしれませんが、なぜ 3 つの別々のウィンドウを開く必要があるのでしょうか? 代わりに jQuery ダイアログを使用できますか? アプリでウィンドウを開くと、非常にイライラします。

于 2008-10-27T15:17:41.033 に答える