ブラウザの種類によってフレーム表示するhtmlを切り替えるには?

[上に] [前に] [次に]
真樹 [E-Mail] [HomePage] 1999/10/30(土) 04:24:08
自分のページでフレームを使用して
目次フレームと主フレームによって構成しよう思っています。

ところが、目次のフレームをie4以降でしか再現できないような記述をしているので、
それ以外のブラウザでは閲覧すらままならないようになってしまいました。

そこで、フレームを定義するhtmlファイルでブラウザを判別して、
目次フレームの振り分け表示をしたいと考えています。

試行錯誤してみましたが、思うように動いてくれません。
アドバイスよろしくお願いいたします。

条件は、
・ie4以上ならcontents_ie.htmlをフレーム表示
・それ以外のブラウザならcontents_nn.htmlをフレーム表示
・JavaScriptをオフにしている場合もcontents_nn.htmlをフレーム表示
上2つはScriptで判別し、最後の条件は<NOSCRIPT>で行けるのではないかと考えています。

稚拙なコーディングですが、
ファイルをサーバにアップしておりますので御覧になってください。

http://www.geocities.co.jp/SiliconValley-Bay/1517/index.html
 フレーム定義ファイル

http://www.geocities.co.jp/SiliconValley-Bay/1517/contents_iehtml
 ie4以降用目次フレームファイル(空ファイル)

http://www.geocities.co.jp/SiliconValley-Bay/1517/contents_nn.html
 それ以外のブラウザ用目次フレームファイル(空ファイル)

http://www.geocities.co.jp/SiliconValley-Bay/1517/main.html
 主フレームファイル

因みに、現状のindexファイルを閲覧しようとしても、まともに表示されません。

よろしくお願いいたします。

1999/10/30(土) 04:36:14
index.htmlを

version = navigator.appVersion.charAt(0)
if(navigator.appName == "Netscape" && version >= "4"){
document.write ('<FRAMESET 〜>');//IE4以上に対応するフレームセットを書き出す
〜略〜
document.write ('</FRAMESET>');
}else{
document.write ('<FRAMESET 〜>');//IE4以上でないブラウザ用のフレーム
〜略〜
document.write ('</FRAMESET>');
}
<NOSCRIPT>
<FRAMESET 〜>
<!--スクリプト使えない人用のフレーム-->
</FRAMESET>
</NOSCRIPT>

でうまく行くかしら?
何となくNOSCRIPTが怪しい気もする。

1999/10/30(土) 04:58:17
おや、ごめんなさい。
IE4以上でしたね。
if(navigator.appName == "Netscape" && version >= "4"){
じゃなくて
if(navigator.appName == "Microsoft Internet Exploler" && version >= "4"){
ですね・・・。ぼけてるなぁ・・・(−_−;

真樹 [E-Mail] 1999/10/31(日) 00:25:56
猫さん、アドバイスありがとうございます。

早速試させていただきました。
フレームは構成できるようになりましたが、
JavaScriptを実行させる記述がうまくいきません。

恐らく、フレーム定義ファイルでJavaScriptを実行するには、
<FRAMESET onLoad=xxx>などで呼ぶのだと思いますが・・・。

いただいたスクリプトを記述したファイルを再びアップいたしました。
済みませんが、今一度添削お願いいたします。

http://www.geocities.co.jp/SiliconValley-Bay/1517/index.html

お手数お掛けいたします。

ばびん 1999/10/31(日) 01:19:19
--></script>

//--></script>
にすれば直る気がする・・・

1999/10/31(日) 02:31:34
<SCRIPT LANGUAGE="JavaScript">
<!--
if((navigator.appVersion.charAt(0) >= 4) && (navigator.appName == "Microsoft Internet Explorer")){
document.write ('<FRAMESET COLS="50%,*">');
document.write ('<FRAME SRC="./contents_ie.html" name="contents" scrolling="auto">');
document.write ('<FRAME SRC="./main.html" name="main" scrolling="auto">');
document.write ('</FRAMESET>');
}else{
document.write ('<FRAMESET COLS="50%,*">');
document.write ('<FRAME SRC="./contents_nn.html" name="contents" scrolling="auto">');
document.write ('<FRAME SRC="./main.html" name="main" scrolling="auto">');
document.write ('</FRAMESET>');
}
//-->
</SCRIPT>

<!-- JavaScript非対応ブラウザとJavaScriptをオフにしているユーザ用記述 -->
<NOSCRIPT>
<FRAMESET COLS="50%,*">
<FRAME SRC="contents_nn.html" name="contents" scrolling="auto">
<FRAME SRC="main.html" name="main" scrolling="auto">
</FRAMESET>
</NOSCRIPT>

今度は動作確認したので、これで完璧だと思います。
申し訳ない。最初のは Explolerって書いてた。
正しくはExplorer何です。
それだけなんです。
//-->
にしないとNNでシンタックスエラーもでますね。
当たり前ですが。
変な教え方でどうもすいませんでした。
やっぱぼけてたね・・・昨日は

真樹 [E-Mail] 1999/11/01(月) 01:48:46
ばびんさん、猫さん、ありがとうございます。

自宅マシンのie5では正常に動作していますが、NN(4.7)ではダメなようです。
(真っ白なページが表示されます。)
NN4.7だけに起こる現象なのでしょうか?

ブラウザ判定を細分化してテストしてみます。

もし原因がおわかりになりましたらご一報ください。
よろしくお願いいたします。

1999/11/01(月) 02:18:39
file://-->
ってなってるのが原因です。

真樹 [E-Mail] [HomePage] 1999/11/02(火) 01:25:35
す、すみません、ケアレスミスです。

バッチリ動作しました。ありがとうございます。


つながりのある質問を続けさせていただきます。

ご協力いただいたスクリプトですが、
<JavaScript>が</HEAD>のあとに置かれているので、
ダイアルアップ環境などでJavaScriptを完全に読み終わる前にリンクなどを押されると、
スクリプトエラーを発生する可能性があります。

そこで、ヘッダ内に入れて実行されるようにあれこれ考えて、
結局思い付かなかったので、そのままヘッダ内に入れてしまいました。
するとあっさり動いてしまいました。

でも、ヘッダ内で<FRAMESET>や<FRAME>等を定義してしまって良いものでしょうか・・・。

ファイルは
http://www.geocities.co.jp/SiliconValley-Bay/1517/index.html
です。

1999/11/02(火) 07:19:31
HTMLの仕様とかには全然詳無いので断言は出来ませんが、HTMLの書き方としては良くないと思います。
<HEAD>内でもうまく動くのは運良くIEとNNが<HEAD>タグや<BODY>タグを認識していないからだと思います。
どうしても<HEAD>内に入れたいならこういうのはどうでしょう?
<HTML>
<HEAD>
<TITLE>CHAT</TITLE>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function changeframe(){
msie = '<FRAMESET COLS="50%,*"><FRAME SRC="./contents_ie.html" name="contents" scrolling="auto"><FRAME SRC="./main.html" name="main" scrolling="auto"><NOFRAMES>フレーム機能を使っています。<BR>Netscape2.0以降かInternetExplorer3以降で御覧ください。<BR></NOFRAMES></FRAMESET>';
nn = '<FRAMESET COLS="50%,*"><FRAME SRC="./contents_nn.html" name="contents" scrolling="auto"><FRAME SRC="./main.html" name="main" scrolling="auto"><NOFRAMES>フレーム機能を使っています。<BR>Netscape2.0以降かInternetExplorer3以降で御覧ください。<BR></NOFRAMES></FRAMESET>';
if((navigator.appVersion.charAt(0) >= 4) && (navigator.appName == "Microsoft Internet Explorer")){
return msie;
}else{
return nn;
}}
//-->
</SCRIPT>
</HEAD>
<SCRIPT>
<!--
document.write (changeframe());
//-->
</SCRIPT>
<NOSCRIPT>
〜省略〜
</NOSCRIPT>
</HTML>
ただ、これであなたが危惧しているようなエラーがでない保証はありませんが。
自分で実験してみて下さい。
ついでに<NOFRAMES>はたしか<FRAMESET>の中に入れ無ければいけないはずなので直してみました。

1999/11/02(火) 07:39:11
というか、ふと思ったんですが、このファイルではフレーム分けをしているだけですよね。
フレームよりも先に、フレームに入るファイルの内容が表示されることはたぶん無いと思うんです。?だから
>ダイアルアップ環境などでJavaScriptを完全に読み終わる前にリンクなどを押されると、
>スクリプトエラーを発生する可能性があります。
これは杞憂では?
だから31日の回答で良いと思います。
別に今日のを使っても同じ事なんですけど・・・。
<NOFRAMES>は直したほうが良いですね。

真樹 [E-Mail] [HomePage] 1999/11/03(水) 01:26:26
[[解決]]
たびたびすみません。
そうですよね、フレームの定義ファイルが読み終わる前にフレームは構成されないですよね。
以前エラーが出たのは1枚のhtmlでした。(汗)

ですが、猫さんが最後に提示していただいたコードが
1番形式に沿っていると感じたので全面的に使用させていただきます。

最後までお付き合いいただきありがとうございます。

[上に] [前に] [次に]