• ベストアンサー

iFlame2つを同時に書き換えるには?

一つのファイルに、IE専用のフレームタグのiFlameで2つのフレームを埋め込んでいて、一つが操作画面でもう一つが情報画面という風にしています。 この時、操作フレームでリンクをクリックすると、2つ同時に画面が変わるというものを作りたいと思っています。 一つならば、TARGET指定でリンクさせることができるのですが、同時に2つというやり方がわかりません。是非、お力をお貸し下さい。よろしくお願い致します。 //////////////////iFlameが2つ埋め込まれている画面 <HTML> <HEAD> <TITLE>●画面全体</TITLE> </HEAD> <BODY> ●メイン画面 <iframe src="index_main.html" name="main"></iframe><br><br> ●操作画面 <iframe src="index_control.html" name="control"></iframe> </BODY> </HTML> //////////////////操作ボタンのあるiFlameのページ <HTML> <HEAD> <SCRIPT language="JavaScript"> function Syncro(mPage,cPage){ main.location=mPage; control.location=cPage; } </SCRIPT> </HEAD> <BODY> <A HREF="Javascript:Syncro('main2.html','control2.html')">両方のWINDOWを書き換える</A><BR> </BODY> </HTML>

質問者が選んだベストアンサー

  • ベストアンサー
  • ais
  • ベストアンサー率25% (3/12)
回答No.1

こんにちわ! ちょうど参考文献があったので、 >>main.location=mPage; >>control.location=cPage; の部分なのですが、 parent.main.location.href=mPage; parent.control.location.href=cPage; にしてみてはいかがでしょう? parent=現在のフレームの親フレームの意味  || ここをtop(最初に定義されたフレーム)やself(自分自身のフレーム)に設定することも可能だそうです♪

noname#107402
質問者

補足

ありがとうございます。しかし、 残念ながら上手くいきませんでした。スペル違いは無いと思いますが、 parent.main.location=mPage; parent.control.location=cPage; も動きません。。なぜでしょう??

その他の回答 (4)

  • chocolats
  • ベストアンサー率46% (23/49)
回答No.5

leaz024さん、そうですね。hrefが正しかったです^^;すみません。 ただ、わたしのスクリプトも、IE5、NN4.78で動作確認済みでした。 サーバーにあげても動きます。OSはwin2000です。 ということで、funaさんお手数ですが、動作確認に使われたOSとブラウザのバージョンを教えていただないでしょうか? 気になりますので、よろしくお願いいたします。

noname#107402
質問者

お礼

ありがとうございます。 ちょうど今、書き込みをしたのですが、私のトラブルの原因は、name属性にふさわしくない語を指定した為動かなくなっていました。 alert(parent.screen.location); などでundefineなどで値が出なかったので、変更すれば動きました。ちなみにIE5.5、WIN2000を使っていました。 勉強になりました。ありがとうございました。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

フレームの階層概念と、オブジェクト/プロパティをよく理解されれば解決するでしょう。 まず、フレームの階層は次のようになっていることと思います。   画面全体のHTML   ├index_main.html   └index_control.html この時、全体画面HTMLからは、それぞれのフレームに「main」「control」でアクセスできます。 また、それぞれのインラインフレーム内のHTMLから全体画面HTMLは、「parent」でアクセスできます。 (直接の親子関係にあるので、parentの代わりに「top」を指定するのはやめましょう。) これを組み合わせると、たとえばindex_main.htmlからindex_control.htmlへは、「parent.control」でアクセスできることになります。(逆も然り) 次に「location」についてですが、これは「オブジェクト」であり、URLを表すプロパティではありません。 URLを指定する場合は、「hrefプロパティ」に対して行います。 と言うわけで、関数を次のように直せば動きます。(動作確認済み)   function Syncro(mPage,cPage){     parent.main.location.href = mPage;     parent.control.location.href = cPage;   } (コピペする際は、全角スペースに注意)

noname#107402
質問者

お礼

ありがとうございます。 なるほどです。どれがオブジェクトでどれがプロパティか、ということを把握していませんでした。

  • ais
  • ベストアンサー率25% (3/12)
回答No.3

再登場aisです♪ 私も試してみました! で、変数を使う形はやはり失敗してしまって。 (すいません、あいまいなアドバイスになってしまって) でも直接URL指定してあげたらちゃんと動いてくれましたよ♪ >>function Syncro(mPage,cPage){ function Syncro(){ >>main.location=mPage; parent.main.location.href="http://www.URL1"; >>control.location=cPage; parent.control.location.href="http://www.URL2"; >>} <A HREF="Javascript:Syncro()">両方のWINDOWを書き換える</A> でどうでしょう??

noname#107402
質問者

お礼

ありがとうございます。 簡単にテストをすれば、変数の方法でも動きました。でも、本番用に埋め込むと動きません。謎な状況に追い込まれています(笑)

noname#107402
質問者

補足

一応報告させて下さい。 皆様のお力添えで、上手く動作するようになりました。本番では、name属性でscreenという名前を使っていたために動作しなかったようです。(お馬鹿) ありがとうございました。

  • chocolats
  • ベストアンサー率46% (23/49)
回答No.2

操作ボタンのあるiFlameのページの記述を <SCRIPT language="JavaScript"> function Syncro(mPage,cPage){ parent.frames["main"].location=mPage; parent.frames["control"].location=cPage; } </SCRIPT> になります。子フレームから指定する場合、こういう風にparent(親)から書いていけばOKです。 また、クリックする場所は始めのものでも大丈夫ですし、 <A HREF="Javascript:Syncro('main2.html','control2.html')">test</a> こういう書き方もありますね。

noname#107402
質問者

補足

ありがとうございます。 しかしながら、動作しないようです。??? <a href="main2.html" target="main">操作する</a> では、動作するのでオブジェクトとしては、Windowでしょうか?いずれにしても困っております。

関連するQ&A