こんにちわ。
現在開発しているWEBページで、困っています。

まず、最初のページで、フレームが左右に分割しています。
左フレームAはリンクがたくさんはってあります。
右フレームBはトップロゴがあります。
右フレームBのロゴを押すと、右フレームはさらに上下に分割し、上フレームCはヘッダーとして使用し、下フレームDは詳細画面になっています。
左フレームAのリンクを押すと、下フレームDの内容が変わるのですが、フレームが4つ(A,B,C,D)に分割される前に左フレームAのリンクを押してしまうと、新しくブラウザが開かれてしまいます(Targetがないため)

そこで、URLを引数として、上下画面にフレーム分割をするソースに受け取った引数URLをフレームセットで実行できないかと考えました。

・・・がサンプルなどをひっくり返しても、なかなかできません。
どなたかご教授していただけるととても助かります。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (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()を挟むなどして、順番に追えば、理解出来ると思います。もし、この内容で大丈夫そうと思えたら、構築するシステムに合わせてカスタマイズしてみてください。
    • good
    • 0

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 です。
    • good
    • 0
この回答へのお礼

思ったとおりに動作しました。
大変感謝しております。
ありがとうございました。

また、上記誤りは気づきました。
大丈夫です。

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

お礼日時:2001/10/29 14:26

・トップロゴを押す前に、左フレームのボタンは押せないようにする。


トップロゴ表示時には1フレームにして、左フレームのボタンも出さない。もしくは、出しておきたいのであれば(押せないのに出しても意味無いと思いますが)クッキーなどで制御。

・ダミーフレームをつくり、最初から4フレームで表示する。

ぐらいしか思いつきません。
    • good
    • 0

答えになってないかも知れませんが、


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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【確率統計】99%信頼区間に6個中、5個入ること?

Aが、Bと同等であることを示したいです。

A及びBは正規分布を示し、Bはμ=100、σ=1.0という前提です。

Aを5個測定して、Bの99%信頼区間に入れば、BはAと同等であると言いたいのですが、その場合、危険率は5%となります。

測定結果が信頼区間から外れる確率は5%あるので、判定基準を5個中、5個としてしまうと厳しい判定だと思います。
そこで、6個中、5個が99%信頼区間に入ればAはBと同等と結論付けたいと思いますが、これでは判定が緩すぎると言われる不安があります。

測定のn数はこれ以上増やせません。
6個中、5個でOKとすることについて、どのように理論だてれば良いでしょうか?
また、1個は外れ値が出てもOKとすることを前提として、「6個中、5個が99%信頼区間に入る」の代案がありましたら、ご教示お願いいたします。

Aベストアンサー

> Aを5個測定して、Bの99%信頼区間に入れば、BはAと同等であると言いたいのですが、その場合、危険率は5%となります。

99%信頼区間とありますが、母平均の信頼区間ではないですよね。
多分、Bの分布の99%を覆う区間のことを言っているのだと思いますが、それを信頼区間とは呼ばないでしょう。

さて本題ですが、もしAがBと同じ分布であるなら5個のデータがすべてBの99%区間に入る確率は0.99^5=0.95099なので、確かにほぼ有意水準5%の検定になります。
一方6個中5個以上とすると0.99^5*0.01*6+0.99^6=0.99854なので、有意水準0.146%の検定になります。
データ数が異なるので一概には言えませんが、有意水準を小さくとると検出力は悪くなるので、判定が緩すぎると言われる可能性がありますね。
でしたら、99%区間ではなくもう少し狭めて有意水準を5%となるようにしては如何でしょうか?
0.93715^5*(1-0.93715)*6+0.93715^6=0.95000

しかし、この方法ではAとBが同じ分布であるという検定にはなりませんね。
平均と分散が異なっていてもBの99%区間に入いる確率が99%である分布を考えてみてください。

もし、「A及びBは正規分布を示し、Bはμ=100、σ=1.0という前提」が確かならば、Aのデータから標本平均と標本分散を計算し、μ=100、σ=1.0かどうか検定した方が良いように思います。
このとき、個々の検定の有意水準は2.5%とします。
データ数は多い方が良いので5個よりは6個ですべきです。

あと付け加えると、同等性の検定について調べてみることをお勧めします。
簡単に説明すると、統計的仮説検定は同じであるということが基本的にはできません。
そこで、ある程度以上の違いを十分な検出力で検出できるように検定し、その結果有意でなければ、帰無仮説を支持しようというのが同等性の検定です。

> Aを5個測定して、Bの99%信頼区間に入れば、BはAと同等であると言いたいのですが、その場合、危険率は5%となります。

99%信頼区間とありますが、母平均の信頼区間ではないですよね。
多分、Bの分布の99%を覆う区間のことを言っているのだと思いますが、それを信頼区間とは呼ばないでしょう。

さて本題ですが、もしAがBと同じ分布であるなら5個のデータがすべてBの99%区間に入る確率は0.99^5=0.95099なので、確かにほぼ有意水準5%の検定になります。
一方6個中5個以上とすると0.99^5*0.01*6+0.99^6=0.99854な...続きを読む

Q複数フレームで「戻る」ボタンを押すと、1フレームしか戻らない

お忙しいところ申し訳ありませんが、教えてください。
「複数フレームを同時に書き替える」まではわかったのですが、「戻る」ボタンを押すと、1フレームしかページがもどりません。3フレームに分けているのですが、3フレームが同時に「戻る」ことはjavascriptでできるのでしょうか?ちなみにスクリプトは

function viewWin(p1,p2,p3){window.open(p1,"frame1");window.open(p2,"frame2");window.open(p3,"frame3");}

です。
基本的な質問だと思うのですが、わからなくて困ってます。どなたか教えてください。よろしくお願いします。

Aベストアンサー

各フレームごとにそれぞれwindow Objectが一つずつありますよね。
それぞれのwindow Objectでhistory.back呼ぶとどうなります?

Q白球5個、赤球2個、黒球3個の計10個を2組に分ける方法は何通りか

白球5個、赤球2個、黒球3個の計10個を2組に分ける方法は何通りか
まず、白球5個は(5,0)、(4,1)、(3,2)の3通りに分けられると考えました。
次に白球5個を(5、0)に分けた場合、赤球2個は(2,0)、(1,1)、(0,2)の3通り、黒球3個は(3,0)、(2.1)、(1,2)、(0,3)の4通りに分けられるので、計12通りに分けられると考えました。同様に、白球5個を(4,1)、(3,2)に分けた場合も赤球2個と黒球3個をそれぞれ計12通りに分けられるので、最終的に白球5個、赤球2個、黒球3個の計10個を36通りに分けられると考えました。
しかし、間違っているようです。どこか間違っているのか分かりません。アドバイスいただければと思います。よろしくお願い致します。

Aベストアンサー

10個と0個に分けた場合は2組に分けたとは言わないのでは?

答えは35通りではないですか。

Qフレームワークによってどうしてもname属性がa[1].bになってしまうとき

現在Strutsにて開発中です。
Strutsのiterateの中にチェックボックスが存在します。
次の画面にてチェックが入ったか入っていないかを判断するために、チェックボックスはどうしても
<html:checkbox name="selectTimesInfo" property="selectTimes" value="1" indexed="true"/>
とうい形で宣言しなくてはなりません。

そうするとHTMLに変換された際、
<input type="checkbox" name="selectTimesInfo[14].selectTimes" value="1" checked="checked">
といった形で
name="selectTimesInfo[14].selectTimes"
となってしまいます。

([]ないの数字は、iterateで回る数分増えていきます。)

いっせいに、チェックをつけたり、消したりすることをjavaScriptにて行いたいのですが、name属性が普通と異なるため、うまくいきまん。

現在、
function BoxChecked(check){
var count;
var inform;
var name;
for(count = 0; count < 15; count++){
inform = document.MainForm;
name = "selectTimesInfo["+count+"].selectTimes";
inform.name.checked = check;
}
}
といった内容でこころみてはいるのですが・・・。

どなたか対処方ご存知でしたら教えてください。

現在Strutsにて開発中です。
Strutsのiterateの中にチェックボックスが存在します。
次の画面にてチェックが入ったか入っていないかを判断するために、チェックボックスはどうしても
<html:checkbox name="selectTimesInfo" property="selectTimes" value="1" indexed="true"/>
とうい形で宣言しなくてはなりません。

そうするとHTMLに変換された際、
<input type="checkbox" name="selectTimesInfo[14].selectTimes" value="1" checked="checked">
といった形で
name="selectTimesInfo[14].selectTimes...続きを読む

Aベストアンサー

name属性は確かに特殊な値ですが、それが問題ではないと思います。

inform.name.checked = check;
のところを
inform[name].checked = true;
としてみて下さい。

Qコロッケ1個10円お一人様5個まで  何個買いますか?

「コロッケ1個10円お一人様5個まで」
みなさんは今晩のおかずなら何個買いますか?
何回も並んでたくさん買ったり、一緒に連れている子供を一人としてたくさん買いますか?

わたしは5個買っちゃいました。
明日の朝もこれでコロッケは決定です。

Aベストアンサー

そりゃ安い!早速並ばねば!!
7人家族に5個では喧嘩の元!
子どもにも並ばせて10個は最低ライン。
がんばって15個ゲットできたら翌朝コロッケサンドイッチに決定。
・・・たしか冷凍コロッケがあったはずだけど。

Qjavascript:(function(q, a, z) { q[a]("f")[z] = Ma

javascript:(function(q, a, z) { q[a]("f")[z] = Math.floor(Math.random()*999999);document.forms[0].submit(); })(document, "getElementById" ,"value");

このブックマークレットをsetIntervalで動かしたいのですがどう書き換えればいいのかよくわかりません。

調べたらstartfncやsetInterval(ここに何かを指定?,ミリ秒);を付ければ可能なことがわかったのですがうまくいきません。
初心者です。何卒宜しくお願いします

Aベストアンサー

こんにちは

>setIntervalで動かしたいのですが~~
setIntervalは以下のような構文になります。
 intervalID = window.setInterval(func, delay);
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval

ご提示のスクリプトは即時関数の形式をとっていますので、さらに関数化(匿名関数でも可)して上記構文のfuncに当てはめれば良いことになります。
http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e
スクリプトは概ね以下の2行と等価ですので、こちらを関数化しても同じですね。
(フォームに乱数を設定しサブミットする)
 document.getElementById("f")..value = Math.floor(Math.random()*999999);
 document.forms[0].submit();


ところで、ご提示のスクリプトではフォームをサブミットするようになっていますが、通常はサブミットするとページが遷移してしまうので、setIntervalで繰り返すことは難しいはずです。
まぁ、target属性が設定されていたりすれば別ですけれど・・・
使い方がいまいちよくわかりませんが、文法的には
 setInterval( function(){
  ~~~
}, dalay);
とするか、
 setInterval(hoge, dalay);
 function hoge(){
  ~~~
 }
のようにすることで、実行が可能なはずです。(繰り返しできる環境であれば・・・)

こんにちは

>setIntervalで動かしたいのですが~~
setIntervalは以下のような構文になります。
 intervalID = window.setInterval(func, delay);
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval

ご提示のスクリプトは即時関数の形式をとっていますので、さらに関数化(匿名関数でも可)して上記構文のfuncに当てはめれば良いことになります。
http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e
スクリプトは概ね以下の2行と等価ですので、こちらを関数化しても同じですね。
(フォ...続きを読む

Q箱ティッシュはなぜ5個入り?

箱ティッシュはなぜ5個入りパックばかりなのでしょうか。

箱のサイズが最近は小さくなっています、にもかかわらず5個入りばかりですよね。
特に深い意味は無いのでしょうか。

Aベストアンサー

自信はない、・・・というか想像ですが、

箱ティッシュが1個でしか売っていないと、値段が高くなってしまいます。だから、複数個入りパックで売ることにしたのだと思います。だからといって、10個入りパックで売ると多すぎて家へ持って帰るときに邪魔になる・・・。
5個入りが値段も大きさもちょうどいい数なのでは?

Qインラインフレームで組まれたHTMLで子フレームより、親フレームのUR

インラインフレームで組まれたHTMLで子フレームより、親フレームのURLを参照したいです。
parent.locationで参照出来ることは、わかったのですが、サイトの制御がかかっているようで
これは、使えないようです。

サイトは、楽天です。

他に何か方法があればと思うのですが、
ご教授のほど、お願い致します。

Aベストアンサー

楽天に限らず、javascriptで他のサイトのコンテンツにアクセスする事は出来ません。
<iframe>でも<frameset>でもajaxでも不可能です。
どうしても、自サイト内に別途代理応答的な動きをするプログラムが必要です。
楽天の何を取得したいのかわかりませんが、RSS Feedみたいな特定のXMLなら
アクセス用のAPIサービスを提供しているサイトもありますが...
http://code.google.com/intl/ja/apis/ajax/documentation/
http://code.google.com/intl/ja/apis/ajaxlanguage/documentation/
http://developer.yahoo.co.jp/
http://pipes.yahoo.com/poolmmjp/feed_api
http://www.ajax-cross-domain.com/

Q5個の電球の明るさ

6V 2.4Wの電球を5個つなごうとしています。
電球1個ずつにスイッチを取り付けたいので、現在並列つなぎにしています。電球1個だけをつけたときの明るさ(電球にそのまま6Vの電圧をかけた時の明るさ)と、5個同時につけた時の電球1個あたりの明るさを同じにすることは出来るでしょうか?

Aベストアンサー

回答に対するお礼部分の質問に返答です。
その通りです。

 ACアダプターは絶縁物と銅線、鉄、金属めっき、といった、物を使い、電流が多少多く流れても、ほかの物質に変化しない物質で作られています。
但し、アダプターから電流を流し出してもらうには、何百キロメートルも離れた、発電所に頼らなければなりません。
 アダプターの中にも、必ず、電線の回路をまとめて
電気抵抗があります。アダプターに手を触れると、暖かいのは、その内部抵抗で発熱しているからです。

 しかし、化学変化に頼って内部で電圧と電流を作っている、しかも寿命のある(後ろの参考)、取り出す電流で、電池の内部抵抗が予測出来ない大きさで変化する乾電池と比較すると、ACアダプターの電線の内部抵抗の変化は、ほんのわづかで、計算もできますから、電圧降下の計算式はいつでも当てはまり、RxIボルト電圧降下して下がった電圧が出てきます。
ACアダプターに指定された範囲で使う限り、安定しています。範囲は、VAの値で見れます。(ボルトアンペアの数字で分かります)オーバーすると焼けてしまいます。

参考

★乾電池というのは、+電気を帯びた+イオン物質と-電気を帯びた物質(分子)2つの間で、電子が+イオンの方に流れていって結合中和して徐々に違った物質になってしまい、電流を流す電気を帯びた分子がなくなってしまう、と、電池の寿命です。
たいした意味がありませんが、こじつけると、電池が中和して、電流をだせなくなった時を、電池の内部抵抗が∞(むげんだい)オームになったといいます。

 電池の内部で化学変化を起こす物質の間で電子を流す原理(+と-に電球を接続した時流れます)、の電源ですから、化合してしまうと、化学変化が終わってしまうのです。
 自動車の鉛を使ったバッテリーの様に、中和して違う物質「酸化した鉛」になってしまって電流を流せない極板に変化したのを、外から、逆に強制的に電圧を加えて電流をバッテリーに流し込んでやると、中和していた電極は、分解されて元の電極に戻る電池もあります。元に戻す操作を●「充電」といっています。

 携帯用電動工具(ドリル)、デジカメ用電池は充電して再生可能な電池ですが、単一,単二、単三などは、再生できないでしょう?。
 電池は必ず直流電池です。携帯に絶対なくてはならないものです。必要なものです。

回答に対するお礼部分の質問に返答です。
その通りです。

 ACアダプターは絶縁物と銅線、鉄、金属めっき、といった、物を使い、電流が多少多く流れても、ほかの物質に変化しない物質で作られています。
但し、アダプターから電流を流し出してもらうには、何百キロメートルも離れた、発電所に頼らなければなりません。
 アダプターの中にも、必ず、電線の回路をまとめて
電気抵抗があります。アダプターに手を触れると、暖かいのは、その内部抵抗で発熱しているからです。

 しかし、化学変化に頼っ...続きを読む

Qフレーム分割領域のサイズを変更する

HTMLのframesetタグでフレームを分割してHTMLを
表示させることができます。例えば...

<frameset rows="40%,60%">
<frame name="frm_01" target="f_left" src="left.htm">
<frame name="frm_02" target="f_right" src="right.htm">
</frameset>

と記述すると、ウィンドウ左にleft.htmを40%、ウィンドウ右にright.htmを
50%割合で表示します。これらを何かHTML上のボタンをクリックされる
などのイベントが生じた場合に、ウィンドウ分割してある比率を(例:left.htm40%→60%)の
ように変更したいのですが、そのようなことはできないものでしょうか?

Aベストアンサー

parent.document.write('~


');
で、トップのファイルと全く同じで割合を変えたようなのを書くということになるのではないでしょうか。

但し、自動広告とか入っているとうまく行かないでしょうね~きっと。
------------------------------------
以下TOPファイル
------------------------------------

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>

<frameset cols="80,*">
<frame src="right.html" name="right" noresize>
<frame src="left.html" name="left" noresize>
</frameset>
<noframes>

<body>
</body>
</noframes>
</html>

------------------------------------
以下LEFTファイル
------------------------------------
<html>

<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<script language="javascript"><!--
function a(html1, html2) {
parent.document.write('<html><head><meta http-equiv="content-type" content="text/html;charset=shift_jis"></head><frameset cols="150,*"><frame src="'+html1+'" name="left" noresize><frame src="'+html2+'" name="right" noresize></frameset><noframes><body></body></noframes></html>');
}
//--></script>
<body>
<a href="javascript:a(top.left.location.href, top.right.location.href)">abc</a>
</body>

</html>

このあたりが動作的には究極的に一番速い(一瞬で切り替わる)
ので、いかにもフレーム境界位置が「瞬時に」変わると言う
感じになるはずなので、参考にしてやってみてください。
ただし、一方で、動作の安定性が欠けます。広告などがあっ
たり、ある一定以上、フレームページが大きいと挙動不審に
なるとおもいます。個人的にはオススメしないです。

一番安定するのは、CGIや、HTMLへの?つき引数として渡して
それをtarget="_top"で呼び出す方法ですが、スピード的に
「ガクッ」と極端に落ちるので、これらを使ってしまうと、
「フレームの境界位置が変わる」と言う感じにはならないで
しょうね。

ヽ(´ー`) マターリ♪
   〇ヽ
   Л

parent.document.write('~


');
で、トップのファイルと全く同じで割合を変えたようなのを書くということになるのではないでしょうか。

但し、自動広告とか入っているとうまく行かないでしょうね~きっと。
------------------------------------
以下TOPファイル
------------------------------------

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>

<frameset cols="80,*">
<frame src="right.html" name="right" noresize>
<f...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報