- ベストアンサー
URLを引数とし、フレーム間で渡す方法
- WEBページでフレーム間でURLを引数として渡す方法についてご教授ください。
- 現在開発中のWEBページでフレーム間の情報共有が必要ですが、URLを引数としてフレーム間で渡す方法がわかりません。
- 左右分割されたフレーム間でURLを引数として渡す方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
この方法でお気に召すでしょうか。 <!-- 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)
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 です。
- madman
- ベストアンサー率24% (612/2465)
・トップロゴを押す前に、左フレームのボタンは押せないようにする。 トップロゴ表示時には1フレームにして、左フレームのボタンも出さない。もしくは、出しておきたいのであれば(押せないのに出しても意味無いと思いますが)クッキーなどで制御。 ・ダミーフレームをつくり、最初から4フレームで表示する。 ぐらいしか思いつきません。
- rittan
- ベストアンサー率36% (38/103)
答えになってないかも知れませんが、 Cookieを使えば宜しいかと…(^_^;l||) トップロゴの表示の際、フレームが分割されてないとの情報をCookieに書き込めば、あとはフレームAからCookie参照で制御できると思いますが、いかがでしょうか?
お礼
思ったとおりに動作しました。 大変感謝しております。 ありがとうございました。 また、上記誤りは気づきました。 大丈夫です。 本当にありがとうございました。