WEB相談室

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

タイトル:Aタグのhref属性で、targetに複数のフレームを指定したい

0:[投稿] らら [2004/03/16 18:57 ][環境:IE6.0、WIN2000 Turbo-Linux、CGI、apache1.3.26、perl5.6.1]

Aタグのhref属性に関して教えて頂きたいことがあります。

今現在の私の手元の環境では、ブラウザに表示するフレームは複数に分かれています。(フレームf1〜f3がrows指定で3つ)
Aタグのhref属性でリンク先を指定する際、そのリンク先の実行場所をtargetで指定するのですが、指定方法には_topや_parent、_blank、_self、あるいはフレーム名を直接指定したりすると思います。
今回はそのtarget先を、複数のフレームを指定できる方法が知りたく思っています。(例えば、フレームのname=f2とname=f3に対してだけ、リンク先の表示(target)をさせたいのです)
ベタにtarget="f2,f3"とやってみても、やはりダメでした…(^_^;)
このようなことが出来る方法はあるのでしょうか?
JavaScriptが何かを使う必要があるのでしょうか?
私の知識・経験の浅さのため、皆様のお力添えを頂きたく思っております。
よろしくお願い申し上げます。


1:[回答] 平野 敬 [MAIL] [URL] [2004/03/16 19:11 ]

HTMLの範囲内ではできません。複数のtargetを指定する方法はHTML4では定義されていません。
http://www.w3.org/TR/html401/types.html#h-6.16
http://www.w3.org/TR/html401/sgml/loosedtd.html#FrameTarget

JavaScriptを用いれば可能です。


2:[回答] らら [2004/03/16 19:21 ]

平野 敬さま

早速のご返信、ありがとうございます。
やはりHTMLでは無理なのですね…。
JavaScriptを用いれば可能ということですが、
恐縮ですがもう少し詳しくお聞かせ願えませんでしょうか?
(思いっきり初心者でして…)
今JavaScriptの本を見ていますが、targetプロパティは
EventオブジェクトとFormオブジェクトとLinkオブジェクトにありました。
内容的にLinkオブジェクトが怪しいと感じてはいるのですが…。
(本にはlengthプロパティを使った例しか載っていませんでした)

よろしくお願い申し上げます。


3:[回答] gun [2004/03/16 20:10 ]

http://www.parkcity.ne.jp/~chaichan/src/javasc12.htm


4:[関連] rara [2004/03/17 21:06 ]

gunさま
リンク参考にさせていただきます。
ありがとうございます。


5:[関連] らら [2004/03/17 21:06 ]

すいません、名前をローマ字で入れてしまいました…。
ららでした。


6:[回答] gun [2004/03/17 23:37 ]

JAVAスクリプトはあまりご存知ないようですので、
サンプルを作ってみました。
(NN7にて動作確認。不都合等ありましたらご容赦ください>皆様)

<script type="text/javascript">
function link13(url){
    parent.f1.location.href=url;
    parent.f3.location.href=url;
}
function link123(url){
    parent.f1.location.href=url;
    parent.f2.location.href=url;
    parent.f3.location.href=url;
}
</script>
</head>

<body>

<a href="JavaScript:link123('http://www.parkcity.ne.jp/~chaichan')">ChaichanPAPA's World123</a>
<br>
<a href="JavaScript:link13('http://www.parkcity.ne.jp/~chaichan')">ChaichanPAPA's World13</a>


7:[関連] らら [2004/03/19 11:57 ]

gunさま

返信が遅くなり、大変申し訳ありません。
この方法を実行させて頂いて、上手くいきました。
ご教授ありがとうございます。
なお、ららが記述したものは下記です。
//target先フレーム複数指定
function link_f123(url){
       parent.f1.location.href = url;
       parent.f2.location.href = url;
       parent.f3.location.href = url;
}
<a href="JavaScript:link_f123('./test.cgi')">戻る</a>

しかし今回は、各フレームf1〜f3に対して、それぞれurlを表示させるのではなく、f1〜f3に対してまとめてひとつのcgi(今回の場合はtest.cgi)を表示させるというものになりました…。
(折角「分かった!」と思ったのに、残念です…)
各フレームに対して表示させることは、gunさまのご教授のおかげで成功しましたが、f1〜f3それぞれに表示ではなく、f1〜f3にまとめて一つのリンク先(cgiなど)を表示させることは可能なのか分からずに困っています。

折角ご教授頂いたのに大変申し訳ありませんが、gunさま、あるいはこういったことを以前に処理したことがある方がいましたら、再度私にご教授願えればと思っています。

よろしくお願い申し上げます。


8:[回答] た  [2004/03/19 13:06 ]

フレームを解除したいってことですか?

target="_top"


9:[関連] らら [2004/03/19 14:13 ]

た様

ご返答ありがとうございます。
ですが、ご提示くださったものとは少し違うのです。
公開できる範囲で現在の状態を公開しますと、

<html>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>データ一覧表示</title>
#1個目のフレーム。ただしname属性なし。
<frameset frameborder="1" bordercolor="" rows="15%,*">
<frame src="./test0.cgi?no_id=$no_id&win=$win" scrolling="no">

#2個目のフレーム。name="f1"。
<frameset frameborder="0" bordercolor="" rows="20%,*">
<frame src="./test1.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f1" scrolling="no">

#3個目のフレーム。name="f2"。
<frameset frameborder="0" bordercolor="" rows="80%,*">
<frame src="./test2.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f2">

#4個目のフレーム。name="f3"。
<frameset frameborder="0" bordercolor="" >
<frame src="./test3.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f3"scrolling="no">
</frameset>
</frameset>
</frameset>
</frameset>
</html>

となっております。
一番上のフレームはname属性がありません。(ここのフレームには絶えず同じcgiを表示しておく必要があります)
そこから下のname属性がついているf1〜f3に対して、targetを指定して、リンクをクリックした際にtest.cgiを表示させたいのです。
(f1〜f3それぞれにリンク先のcgiを表示させるのではなく、f1〜f3フレーム全体で、リンク先のcgiを表示させたいのです)
ご提示くださった_topを用いますと、一番上のname属性の無いフレームまでもが含まれ、ブラウザ画面全体の表示が変わってしまいます。ここまでになるとHTMLではもちろん、JavaScriptでも制御できないのでしょうか?

た様、あるいは他にこの処理に関してご存知の方がいましたら、ご教授願います。よろしくお願い申し上げます。


10:[回答] gun [2004/03/19 14:41 ]

>(f1〜f3それぞれにリンク先のcgiを表示させるのではなく、
>f1〜f3フレーム全体で、リンク先のcgiを表示させたいのです)

意味がわかりません。
もう少し分かり易く説明できますか?


11:[関連] らら [2004/03/19 15:02 ]

gunさま

ご返答ありがとうございます。
ららの説明力不足で申し訳ありません。
画面を直接お見せしたいのですが、それは出来ませんのでご容赦ください。

ブラウザの画面を、rowsで4つのフレームで分けているのですが、
最上部のフレームには常に同じcgiを表示する必要があるので、
リンクをクリックした際のtargetにはなりません。
(なのでname属性を持っておりません)
それより下で更にrowsで3つのフレームf1〜f3に分けているのですが、一番下のf3に表示される「戻る」というリンクをクリックすると、f1〜f3全体でリンク先のcgiを表示させたいのです。
f1・f2・f3それぞれにリンク先のcgiが表示されるのではなく、
f1〜f3の画面全てでリンク先のcgiに飛ばしたいのです。
言い換えると、target="f1,f2,f3"みたいに、f1〜f3全体で1つのターゲット先にしたいのです。(分かりますか…(汗))

説明力不足ですいません。
よろしくお願い申し上げます。


12:[回答] gun [2004/03/19 17:30 ]

回答の前に一つ気になるのですが、フレームセットを無駄に
作ってるように思えるのですが、下のようにすると何か問題
があるのでしょうか?

<html>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>データ一覧表示</title>
<frameset frameborder="1" bordercolor="" rows="15%,17%,54%,*">
<frame src="./test0.cgi?no_id=$no_id&win=$win" name="f0"  scrolling="no">
<frame src="./test1.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f1" scrolling="no">
<frame src="./test2.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f2">
<frame src="./test3.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f3"scrolling="no">
</frameset>
</html>


13:[回答] らら [2004/03/20 17:55 ]

gunさま

ご返答ありがとうございます。
また、ご返答に対してのお礼が遅れてしまったことをお詫びします。申し訳ありません。
gunさまのアドバイスに従い、framesetを減らして下記のように書きました。

<html>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>データ一覧表表示/title>
<frameset frameborder="1" bordercolor="" name="fs1" rows="20%,*">
<frame src="./test0.cgi?no_id=$no_id&win=$win" scrolling="no">
<frameset frameborder="0" bordercolor="" name="fs2" rows="20%,60%,*">
<frame src="./test1.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f1" scrolling="no">
<frame src="./test2.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id&win=$win" name="f2">
<frame src="./test3.cgi?no_id=$no_id&p_id=$p_id&s_id=$s_id
&win=$win" name="f3" scrolling="no">
</frameset>
</frameset>
</html>

最上部のフレームには常に同じcgiを表示していたいので、framesetで区切り、保持するfarameは1つです。(name="fs1")
次に3つのフレームを保持するframeset(name="fs2")をつくり、
そこに「戻る」リンクで指定してあるcgiを表示させたいのです。
なお、「戻る」リンクはframeset(fs2)の一番下のframe(f3)のcgiに貼ります。この状態で、JavaScriptで下記のように書きました。

<script language="JavaScript">
<!--
//target先フレーム指定
function link_f123(url){
       top.fs2.location.href = url;
}
//-->
</script>

「戻る」リンクの内容は下記です。
<a href="JavaScript:link_f123('./test.cgi?no_id=$no_id&$p_id=$p_id&s_id=$s_id&win=$win')">戻る</a>

この状態で、リンクをクリックすると「top.fs2.locationはNullまたはオブジェクトではありません」とのエラーがでます。
framesetタグにname属性で名前を付け、そこの範囲に対してtargetを指定するということは出来ないのでしょうか?或いは指定の仕方がまずいのでしょうか?topではなくparentでもやってみましたが同様なエラーが出てしまいました。リンクをクリックした際、上手くfs2の範囲に飛ばす方法を知りたく思っています。

gunさま、或いはこの処理についてご存知の方がいらっしゃいましたら、ご教授願えればと思います。
よろしくお願い致します。


14:[関連] らら [2004/03/20 17:56 ]

すいません、関連でした…。
失礼しました。


15:[完了] らら [2004/03/20 19:25 ]

ららです。
いつもご教授いただき、ありがとうございます。

やはりframesetにname属性を指定して、JavaScriptからtargetを指定するのは無理だったようです。(frameタグのname属性しか認識しないようですね…(^_^;))
ですので、もうひとつcgiをつくり対処しました。
(2つめのframesetに3つのframeを含ませたかったのですが、
この3つのframeを含ませるのを別のcgiに書きました)

gunさま・平野敬さま、ご教授・ご提示ありがとうございました。


16:[完了] gun [2004/03/22 09:32 ]

もう別の方法で解決されたようですが、
IEならframesetの分割数を変えることもできます。
function link_f2(url){
    top.fs2.rows = '*';
    // 分割数を1つに変更したのでf1フレームのみになる
    top.f1.location.href = url;
}


17:[関連] らら [2004/03/22 10:24 ]

gunさま

引き続きのご返答、ありがとうございます。
すいません、またまた無知なららにご教授願いたいのですが、
gunさまがご提示下さった上記の方法ですと、元々framesetを2つ(fs1・fs2)に分けてありますが、
上記のような記述を施すと、下のframeset(fs2)に対してだけリンク先のurlが表示させることができるということでしょうか?
(下のfarmeset・fs2にだけurlのリンク先を表示させたいのがららの行いたいことです)
framesetの分割数を変えるということが、どうもイメージできませんでした…。
お手隙の際にでも、お聞かせ頂ければと思っております。

よろしくお願いします。


18:[回答] gun [2004/03/22 11:03 ]

本番のHTMLに組み込まなくても、検証用のHTMLでも作ってそこで見栄えを
確認していただくのが早いと思います。
一応、順を追って説明します。
(0)fs2.rows="20%,60%,*"が初期表示
    (各フレームはf1, f2, f3)
(1)fs2.rows="*"に変更
    (初期設定のf1のフレームだけ表示される)
(2)f1.location.href = url;
    (そのf1フレームのURLを替えることで、fs2フレームセット
    全体にURL指定しているような見栄えになる)


19:[完了] らら [2004/03/22 17:09 ]

gunさま

ご返答ありがとうございます。
手順まで示して頂いて、ありがたい限りです(m_m)
ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World