WEB相談室

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

タイトル:2つのフレームを同時に変える

0:[投稿] かおり [2002/07/17 03:18 ][環境:WIN+IE UNIX系+Perl]

こんばんわ、少し分からないのでお伺いします

二つのフレームを同時に変える場合、
<frameset cors="100,50,*>
<frame src="a.htm" name="menu">
<frame src="b.htm" name="main">
<frame src="c.htm" name="sabu">
</frameset>
の、フレームを作っていまして、a.htmから見て、同時にbとcを変えることは、parentを使って出来るみたいなのですが、この、subuと言う名前のついているc.htmの中にアイフレームを作っていまして、その中を変えたいのです。名前を”naka”にしているのですが、アイフレームを呼び出すことが出来ません。sabuを指定すると当然そのページが、丸ごと変わるので、一部分だけを変えたいんです。これを解決するにはどうしたらいいのでしょうか?

よろしくお願いします


1:[回答] かおり [2002/07/17 12:38 ]

すいません、質問の仕方が曖昧でした。

<frameset rows="*,15,150">
 <frameset cols="530,200">
   <frame src="a.htm" name="main" scrolling="NO" frameborder="NO" noresize>
   <frame src="e.htm" name="sabu" scrolling="NO" frameborder="NO" noresize marginwidth="0" marginheight="50">
 </frameset>
 <frame src="b.htm" name="menu" scrolling="NO" noresize frameborder="NO">
 <frame src="c.htm" name="under" scrolling="NO" noresize frameborder="NO">
</frameset>
が、もとの状態です。

この、中のa.htmに、<iframe src="d.htm" name="mannaka" scrolling="AUTO" width="450" height="338" frameborder="0" style="border:1px solid #ff6600"></iframe>
を入れてあります。

そして、b.htmにメニューボタンを置いています。
「日記」「リンク」・・・。という形でそれぞれにリンクを貼りたいのですが、
<A href="#" onClick="parent.main.location.href=nikki.htm';
parent.sabu.location.href='n_mokuji.htm'">日記</A>は、ちゃんと動くのですが、
<A href="#" onClick="parent.mannaka.location.href=link.htm';
parent.sabu.location.href='e.htm'">リンク</A>にすると、何も表示が換わらずエラーが出てしまいます。

表示できる方法を教えてください。


2:[回答] ノン [2002/07/17 13:17 ]

<A href="#" onClick="parent.mannaka.location.href=link.htm';
parent.sabu.location.href='e.htm'">リンク</A>

は、

<A href="#" onClick="parent.main.document.mannaka.src=link.htm';
parent.sabu.location.href='e.htm'">リンク</A>

とか?
テストをしていないので、あてずっぽです。


3:[回答] ナン [2002/07/17 13:18 ]

なまえ、間違えた。ナンです。


4:[回答] かおり [2002/07/17 13:31 ]

ナンさん、ありがとうございます。ただ、エラーは出なくなったのですが、表示は変わりません。DWで作っているのですが、scriptは

<script language="JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
 var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
   d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
 if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
 for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
 if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
  if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>

こんな感じです。スクリプトが違うのでしょうか。
再度、ご教授いただけましたら幸いです


5:[回答] EYE's [MAIL] [2002/07/17 14:38 ]

EYE'sです。
たぶん、上記のJavaScriptはスワップロールオーバー、もしくは単純にロールオーバーだと思います。

質問ご返答に的確な回答でないかもしれないのですが、
「dom」レベルでの指定をしてみてはいかがでしょうか?


6:[回答] かおり [2002/07/17 15:20 ]

EYE'sさん、ありがとうございます。
スイマセン、全然違うスクリプトを貼り付けていたのですね。質問になるのですが、「dom」レベルって言うのは、何ですか?
検索でDOMで調べたら、

if(navigator.appName=='Microsoft Internet Explorer'){
 // IE用のコード
}
if(navigator.appName=='Netscape'){
 // NN用のコード
}

って言うのを書くみたいに出たのですが、下記のものを一応書いてはいます。もしこれがDOMと言うのでないならスイマセン
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
 if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
   document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
 else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->

function MM_openBrWindow(theURL,winName,features) { //v2.0
 window.open(theURL,winName,features);
}
//-->
</script>

なんとなく違う気もしているのですが、スクリプトを教えていただけましたら幸いです、よろしくお願いします


7:[回答] EYE's [MAIL] [URL] [2002/07/19 15:26 ]

遅くなりました。EYE'sです。
(昨日、会社さぼって遊んでたものですから...すいません)

えっと、まず、かおりさん[2002/07/17 15:20]の書き込みのscriptは
if(navigator.appName=='Microsoft Internet Explorer'){  // IE用のコード }
if(navigator.appName=='Netscape'){  // NN用のコード }
は、ブラウザのappNameを取得して、ブラウザ分岐しているもののdomということではないです。
domっていうのは、じつは一番上の書き込みで登場しているんですけど、オブジェクト階層モデル(dom:Document Object Model)のことを指します。というと、むずかしくなっちゃいますので、あとは余裕のあるときにでも参考書籍をご参照くださいね。

えと、質問の意図をまとめさせていただくと、4つのフレームで構成されているサイトで、1つのフレームの中のボタンから、異なるフレームの1つと、また異なるフレームの中のアイフレームを変えるということですよね?それであれば、といいたいところなんですけど、ぼくのページにテストで設置してみますので、そちらをご参照いただけますでしょうか?ページはs-jisで書いてますのでwinでもmacでも(notoPad/simpleText)でソースみてください。

いちおう今から1時間ほどお時間ください。
あと、deleteしちゃうこともあるので、できたらレスください。

こんどは、できるといいですね。


8:[回答] EYE's [MAIL] [URL] [2002/07/19 17:51 ]

あ、自己レスです。
いまアップしてあるものはどうやらエラーがでてしまうらしく、原因はわかっているものの、デバッグしてません。
なので、申し訳ないのですが、いましばらくお待ちください。
よろしくお願いします。


9:[回答] EYE's [MAIL] [URL] [2002/07/19 20:00 ]

EYE'sです。また自己レスですいません。
なんとかエラーはでなくなりましたが、以下のようになっています。
最初に「リンク」をクリックした際には、iframeの中が切り替わります。
また、最初に「日記」をクリックした際にはa.htmとn_mokuji.htmが切り替わります。しかし、その後「日記」を表示させている状態で「リンク」をクリックすると、最初にフレームを開いた状態になります。更にその後、「リンク」をクリックするとiframeが切り替わります。
これでもエラーは出ないのですが、まだちょっと無理やりな気がして。。。というのも、本来なら「日記」を表示させている状態でも「リンク」をクリックすると、iframeの中が切り替わらなければいけないはずなんです。そうなんですよね?>かおりさん。
ごめんなさい、まだそこまではいけてないです。

とりあえずURLを見ていただけますでしょうか?
よろしくお願いします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World