WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:子windowにて親windowの関数使用

0:[投稿] 野口 [MAIL] [URL] [2002/08/15 19:24 ][環境:WIN+IE WIN系+Java]

度々お世話になっている野口です、今回もよろしくお願いします。

現在、メニュー画面で各項目毎にウインドウをオープンして表示し、別の項目を表示する場合は、ウインドウを閉じて、メニュー画面より新たにウインドウをオープンしています。

今回したい事は、項目1を表示しているウインドウからダイレクトに項目2を表示したいのですが、項目毎にウインドウサイズが異なるため、リサイズをする必要があります。リサイズについてはブラウザの環境によっては正常に動作しない等の話を聞いたような記憶があり、できれば、次の項目のウインドウをオープン後自身のウインドウを閉じるようにできないかと考えています。
前置きが長くなりましたが、次の項目のウインドウをオープンする際に親ウインドウの関数を利用したいのですが上手くいきません。
アドレスはhttp://www.noguchi-web.com/index.html です。

現在試みているのは、子ウインドウにて

document.write('<a href="javascript:window.opener.newWindow(ad_3,type_6);wclose();">openclose</a>');
何も反応しません。

良きアドバイスをお願いします。


1:[回答] ひよこ [2002/08/15 21:49 ]

>何も反応しません。
何も反応しないのは、変数ad_3もtype_6も子Windowでは値を持っていないからです。
上記変数は親Windowで値を持っていますが、子Windowには変数の中身は引き継いでいません。
これを旨く動作させるには、子Windowから親Windowの変数名を文字列として渡してやり、親Window側で渡された文字列を自身の変数名として値を取り出す方法で旨くいきます。

子Window側

// まず、変数名を設定
adr = "ad_3";
typ = "type_6"
// 親WindowのwinChange()という関数に変数名を渡す
document.write('<a href="javascript:window.opener.winChange(adr,typ);wclose();">openclose</a>');

親Window側に関数を追加
function winChange(url,type){
    callurl = eval(url); // 変数名からアドレスデータを抽出
    callsize = eval(type); // 変数名からWIndowオプションデータを抽出
    newWindow(callurl,callsize); // windowOpen関数を呼ぶ
}


尚、呼び出し元のスクリプトは支障が無ければdocument.writeで書き出さないで直接

<a href="javascript:window.opener.winChange('ad_3','type_6');wclose();">openclose</a>

の様にするのが良いと思います。


2:[関連] ひよこ [2002/08/15 21:58 ]

別解ですが、親の方をいじりたくなければ、
document.write('<a href="javascript:window.opener.newWindow(window.opener.ad_3,window.opener.type_6);wclose();">openclose</a>');

のように、ダイレクトに親の変数を呼び出す方法でもOKです。


3:[回答] 野口 [2002/08/15 22:36 ]

早速のご回答有り難うございます。
すぐにも、組み込みます。
結果は、必ずお返事させて頂きます。


4:[完了] 野口 [2002/08/15 22:48 ]

有り難うございました。
親元のurlを、絶対アドレスにすることで完璧に動作しました。
これからもよろしくお願いします。


5:[質問] 野口 [URL] [2002/08/16 10:09 ]

ieでは動作するのですが、NC4.7ではnext/backのリンクは動作するのですが、2回目のリンク(親関数の利用)ができません。
現在、トップページの1と2番目の項目のみ前述の関数を組み込んでいます。
トップページのアドレスは
http://www.noguchi-web.com/index.html
アドバイスよろしくお願いします。


6:[回答] ひよこ [2002/08/16 13:41 ]

複数のwindowをopenしたりcloseするときに見られるIEとNCの異なる挙動です。

window.closeで新しくopenしたWindowも閉じられているようです。
原因は新しく追加された関数、newWindow2で、openの引数値にタイトル(window名が指定されないときにwindow名になる)が空白のため、新しくopenされたwindowと閉じようとするwindowが同名(無名)のwindowとして認識されたのが原因の様です。
よって、ここではページ毎に異なるwindow名を指定してやれば解決すると思われます。
タイトルに引数を用いれば簡単にいきそうです。

function winChange(url,type){
   callurl = eval(url);
   callsize = eval(type);
   window.open(callurl,url,callsize);    // urlをタイトルとしてopenする
}

子windowの関数を変更
function wclose(){
   self.window.close()
}

以上を試してみてください。


7:[完了] 野口 [URL] [2002/08/16 15:03 ]

ひよこ さん

有り難うございました。
NCでも動作するようになりました。
勉強になりました。
これからもよろしくお願い致します。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World