プロが教えるわが家の防犯対策術!

一つのファイルに、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>

A 回答 (5件)

こんにちわ!


ちょうど参考文献があったので、

>>main.location=mPage;
>>control.location=cPage;

の部分なのですが、

parent.main.location.href=mPage;
parent.control.location.href=cPage;

にしてみてはいかがでしょう?

parent=現在のフレームの親フレームの意味
 ||
ここをtop(最初に定義されたフレーム)やself(自分自身のフレーム)に設定することも可能だそうです♪

この回答への補足

ありがとうございます。しかし、
残念ながら上手くいきませんでした。スペル違いは無いと思いますが、

parent.main.location=mPage;
parent.control.location=cPage;

も動きません。。なぜでしょう??

補足日時:2002/01/28 16:16
    • good
    • 0

操作ボタンのある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>
こういう書き方もありますね。

この回答への補足

ありがとうございます。
しかしながら、動作しないようです。???

<a href="main2.html" target="main">操作する</a>

では、動作するのでオブジェクトとしては、Windowでしょうか?いずれにしても困っております。

補足日時:2002/01/28 18:00
    • good
    • 0

再登場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>

でどうでしょう??

この回答への補足

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

ありがとうございました。

補足日時:2002/01/29 10:30
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/29 10:05

フレームの階層概念と、オブジェクト/プロパティをよく理解されれば解決するでしょう。



まず、フレームの階層は次のようになっていることと思います。
  画面全体の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;
  }
(コピペする際は、全角スペースに注意)
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/29 10:10

leaz024さん、そうですね。

hrefが正しかったです^^;すみません。

ただ、わたしのスクリプトも、IE5、NN4.78で動作確認済みでした。
サーバーにあげても動きます。OSはwin2000です。

ということで、funaさんお手数ですが、動作確認に使われたOSとブラウザのバージョンを教えていただないでしょうか?
気になりますので、よろしくお願いいたします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ちょうど今、書き込みをしたのですが、私のトラブルの原因は、name属性にふさわしくない語を指定した為動かなくなっていました。

alert(parent.screen.location);

などでundefineなどで値が出なかったので、変更すれば動きました。ちなみにIE5.5、WIN2000を使っていました。

勉強になりました。ありがとうございました。

お礼日時:2002/01/29 10:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!