WEB相談室

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

タイトル:子フレームの更新

0:[投稿] はこ [2003/12/18 11:58 ][環境:WinXP、IE6 WinXP、Apache]

いつもお世話になってます。

次のような構成になっているHPがあります。

<親フレームページ>(AAA.html)
 ○Frame1(a.html)
 ○Frame2(b.html)
  ・Frame2_1(b_1.html)
  ・Frame2_2(b_2.html)

今やりたいのは、
 1)a.htmlでb.htmlをオープンする。
 2)1)後a.htmlからb_1.htmlをオープンする。
ということなので、次のようなソースを書いてみたのですが。

[a.html]
(省略)
function b_open()
{
 window.open("b.html", "Frame2");
 window.open("b_1.html", "Frame2_1");
}
(省略)

b_1.htmlが新しいウィンドウで開かれてしまいます。

b.htmlをAAA.htmlの方で開いておけば、a.htmlから
b_1.htmlをb.htmlのフレームで表示できるのですが、
上記のようなことを実現することはできないのでしょうか?

初心者のためわかりづらい説明になってしまい、
申し訳ありませんがどなたかご教授ください。
よろしくお願いします。


1:[回答] ももも [2003/12/18 14:17 ]

a.htmlからは、Frame2_1は見えません。階層をたどる必要があります。window.openではなく、
parent.Frame2.Frame2_1.location.href="b_1.html"
で試してください。
ただし、window.open("b.html", "Frame2"); の直後に連続して行うとFrame2_1のロードが完了していないのでエラーになります。工夫がひつようです。


2:[回答] はこ [2003/12/18 14:30 ]

もももさん。

回答ありがとうございます。
Frame2_1はまだロードが完了してなくて存在してない
から、新しいウィンドウで開かれちゃってたんですね。

できればその「工夫」について、どうやったらいいか
教えていただきたいのですが。。。


3:[回答] いそね [2003/12/18 14:48 ]

ん?b.htmlの読み込みが完了していば、
window名が指定されているのでwindow.openでもいけると思いますが。

Frame2_1のロードが完了してからb_1.htmlを呼べばいいので
手っ取り早くsetTimeout()を使ってみるとかどうでしょう?
setTimeout("window.open('b_1.html', 'Frame2_1')", 10);
とか。
ちょっと強引です。(笑)#ブラウザの読み込み速度に左右される??


4:[回答] ももも [2003/12/18 15:00 ]

よく見かける方法では、

a.htmlの中に、「a.htmlからb_1.htmlを開く関数」を独立して作っておきます。
Frame2(b.html)のFrame2_1のHTML(何もしなければ開かれるHTML、仮にb_0.htmlとします。)のonloadイベントで、a.htmlの中の「a.htmlからb_1.htmlを開く関数」を呼び出します。

のようになります。


5:[回答] ももも [2003/12/18 15:04 ]

>3
たしかにそうですね。
「連続してopenすると、b.htmlの読み込み前に次のopenがされてしまうから」という説明のほうがよいかもしれません。
表現の仕方が下手で申し訳ありません。
ご指摘、ありがとうございました。


6:[完了] はこ [2003/12/18 16:20 ]

いそねさん。もももさん。

親切な回答本当にどうもありがとうございます。

お二人のご意見を参考にさせていただいて、最終的には
b.htmlの<frameset>のonloadでa.htmlの「b_1.htmlを開く
関数」を呼び出すことにしました。

その結果とうとうやりたいことを実現することが
できました。

お二人には本当に感謝しています。
ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World