Javascriptでの子ウィンドウと孫ウィンドウの処理
-
04-07-2019 - |
質問
Webページにメインウィンドウ(#1)があり、そこから新しいブラウザーウィンドウ(#2)を開き、そこから新しいウィンドウ(#3)を開きます。
今、ユーザーがwindow#3の前にwindow#2を閉じると、window#3はなくなったためwindow.openerで関数を呼び出せなくなるという問題があります。
window#2が閉じたときにwindow#3.openerをwindow#1に設定することです。
私はこれをi window#2にしようとしました(私はjqueryを使用する方法で):
var children = [];
$(window).unload( function( ) {
$.each( children, function( p, win ) {
if ( win ) {
win.opener = window.opener;
}
} );
} );
window#3がロードされると、window#2の配列の子にウィンドウを追加します。
しかし、window#3の前にwindow#2が閉じられた場合、windows#3のwindow.openerはwindow#1を指しません。
window#2を閉じた後でも、孫ウィンドウ(window#3)がメインウィンドウ(window#1)を呼び出すことができるようにするにはどうすればよいですか?
解決
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 !-";
他のヒント
3番目のウィンドウが開いたら、メインウィンドウへの参照を作成する必要があります。
parent = window.opener.opener
これは、2番目のウィンドウを閉じても存続します。
window.opener
はおそらく読み取り専用です。孫が読み込まれたときに祖父母を参照する独自のプロパティを設定します。
function onLoad() {
window.grandparent = window.opener.opener;
}
これは接線方向の場合もありますが、なぜ3つの個別のウィンドウを開く必要があるのですか?代わりにjQueryダイアログを使用できますか?アプリが自分のウィンドウを開くと、とてもイライラします。
var main_window = get_main_window();
function get_main_window(){
var w = window;
while(w.opener !== null){
w = w.opener;
}
return w;
}