• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:URLを引数とし、フレーム間で渡す方法)

URLを引数とし、フレーム間で渡す方法

このQ&Aのポイント
  • WEBページでフレーム間でURLを引数として渡す方法についてご教授ください。
  • 現在開発中のWEBページでフレーム間の情報共有が必要ですが、URLを引数としてフレーム間で渡す方法がわかりません。
  • 左右分割されたフレーム間でURLを引数として渡す方法について教えてください。

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

  • ベストアンサー
noname#3852
noname#3852
回答No.3

この方法でお気に召すでしょうか。 <!-- main.html --> <html> <frameset cols="20%,*">   <frame name="A" src="a.html" />   <frame name="B" src="b.html" /> </frameset> </html> <!-- a.html --> <html> <head> <script language="JavaScript"> function func( ancObj ) {   // フレームBがなければ、とりあえず無視   if ( !parent )     return false;   if ( !(parent.B) )     return false;   // フレームBの中にフレームDがなければ、フレームBを更新。   // その際、フレームDの移り先も合わせて送信   if ( !(parent.B.D) ) {     parent.B.location.href="b.html?frameD=" + ancObj.href ;     return false;   }   // フレームDがあれば、ハイパーリンクでジャンプさせて良し   return true ; } </script> </head> <body>   <a href="http://www.yahoo.co.jp/" target="D"     onclick="return func(this)">Yahoo!</a><br />   <a href="http://www.google.com/" target="D"     onclick="return func(this)">Google</a><br /> </body> </html> <!-- b.html --> <html> <body>   <a href="b2.html">さらに分割</a> </body> </html> <!-- b2.html --> <html> <script language="JavaScript"> function funcOnLoad( ) {   var searchs =""; // URLのパラメータ部分   var key = "" ; // 検索パラメータ   var keyHead = 0; // パラメータの先頭位置   var keyTail = 0; // パラメータ+値の終了位置   var urlOfFrameD = "" ; // フレームDのジャンプ先   // パラメータ文字列の取得   searchs = location.search;   if ( searchs.length == 0 )     return;   // frameDというパラメータ検索   key = "?frameD=" ;   keyHead = searchs.indexOf( key );   if ( keyHead < 0 ) {     key = "&frameD=" ;     keyHead = searchs.indexOf( key );     if ( keyHead < 0 )       return ;   }   // 値の終了位置を検索   keyTail = searchs.indexOf( keyHead + key.length, "&" );   if ( keyTail < 0 ) {     urlOfFrameD = searchs.substring(keyHead + key.length);   } else {     urlOfFrameD = searchs.substring(keyHead + key.length, keyTail);   }   if ( urlOfFrameD.length == 0 )     return ;   // ジャンプ   D.location.href = urlOfFrameD ; } </script> <frameset rows="20%,*" onLoad="funcOnLoad( )">   <frame name="C" src="c.html" />   <frame name="D" src="d.html" /> </frameset> </html> ちょっと長いですが、順を追うと、まず、main.htmlを表示させます。main.htmlは、フレームで左右にa.htmlとb.htmlとに分割されてます。b.htmlはリンクがあり、選ぶとb2.htmlとなり、その中で上下にc.html、d.htmlとなります。 a.htmlには、リンクがあります。今回、onclick属性をつけて置き、returnします。<a>タグでは、onclickからtrueが戻るとhrefで指定したURLにジャンプします。falseが戻るとジャンプしません。 さて、リンクを押されると、親フレームとフレームBがいるか確認します。いない場合は、今回は何もしません。 次にフレームBにフレームDがいるか確認します。いれば、trueを戻してそのままジャンプさせます。 いない場合、まず、フレームBをC、Dに分割させるため、b2.htmlにジャンプします。この際、<a>タグのhrefで指定していたURLもframeDというパラメータとして渡します。フレームAでの作業はここまでです。この際、trueを戻すと別ウィンドウが開くと思うので、何もさせないためにfalseを戻します。  次に、C、Dと分割させられたフレームBですが、このとき、HTMLソースは、b2.htmlに切り替わります。<frameset>タグにonload属性があります。<frameset>や<body>にonload属性があると、そのhtmlの表示が完了した際に、その属性の内容が実行されます。  onload属性内では、まず、このページを表示するためのURLにパラメータがあるか確認します。これは、(windows.)location.searchを調べれば判ります。 次にパラメータにframeDが含まれているか確認にして、あれば、その値(文字列)だけを抽出します。 抽出が終われば、フレームDのURLを変更するだけです。 内容が込み入ってますが、alert()を挟むなどして、順番に追えば、理解出来ると思います。もし、この内容で大丈夫そうと思えたら、構築するシステムに合わせてカスタマイズしてみてください。

その他の回答 (3)

noname#3852
noname#3852
回答No.4

ANo.#3の回答したnisikitです。ソースの訂正です。 a.htmlの13行目あたりの parent.B.location.href="b.html?frameD=" + ancObj.href ; となっている箇所は、 parent.B.location.href="b2.html?frameD=" + ancObj.href ; の誤りです。 誤)b.html -> 正)b2.html です。

cat_tomato
質問者

お礼

思ったとおりに動作しました。 大変感謝しております。 ありがとうございました。 また、上記誤りは気づきました。 大丈夫です。 本当にありがとうございました。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.2

・トップロゴを押す前に、左フレームのボタンは押せないようにする。 トップロゴ表示時には1フレームにして、左フレームのボタンも出さない。もしくは、出しておきたいのであれば(押せないのに出しても意味無いと思いますが)クッキーなどで制御。 ・ダミーフレームをつくり、最初から4フレームで表示する。 ぐらいしか思いつきません。

  • rittan
  • ベストアンサー率36% (38/103)
回答No.1

答えになってないかも知れませんが、 Cookieを使えば宜しいかと…(^_^;l||) トップロゴの表示の際、フレームが分割されてないとの情報をCookieに書き込めば、あとはフレームAからCookie参照で制御できると思いますが、いかがでしょうか?

関連するQ&A