フレームの配置(表示)以外のこともやりたい

[戻る]
彪子 2005/09/20(火) 06:41:07
いつもお世話になっております。 
フレームを表示する HTMLソースで下記のようなものがあります。 

<!-- ここから --> 

<FRAMESET 
cols=161,*><FRAME name=left src="menu.html"><FRAME name=right 
src="/tourokusakuhin4.html"> 
<NOFRAMES> 
<BODY> 
<P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P> 
</BODY> 
</NOFRAMES></FRAMESET> 

<!-- ここまで --> 

このように、フレームをサポートしているブラウザでは通常フレームの配置(表示)のみが行わ
れるようです。フレームの配置をやるとともに、これ以外に JavaScript の実行等を行わせる
ことはできないでしょうか。

dairygoods 2005/09/20(火) 16:24:34
仕様には、

| SCRIPT要素は、HTML文書にスクリプトを組み込むもので、
| HEAD要素あるいは BODY要素に、何回出現してもよい。

とありますね。

こんな風でよいのでは。

<HEAD>
  <SCRIPT>
    ご自由に
  </SCRIPT>
</HEAD>
<FRAMESET ...>
  省略
</FRAMESET>

彪子 2005/09/22(木) 12:22:30
dairygoods 様、いつもありがとうございます。
<BODY> に記述したスクリプトをそのまま <HEAD> に移し換えてもいいと伺って(この点につい
てはまったくわかっていませんでした。不勉強で申しわけありません)、問題になっているフレ
ーム表示をともなう html ファイルの <HEAD> にJavaScript を記述してやってみましたがう
まくいきませんでした。それで、フレームをともなわないファイルの <BODY> にJavaScript 
を記述した、
(1) http://cgi.niji.jp/home/ashizuka/postertown/snow01.htm
を用意し、JavaScript が正常に実行されることを確認しました。次に、このスクリプトをそっ
くり <HEAD> に移した
(2) http://cgi.niji.jp/home/ashizuka/postertown/snow02.htm
を作成しましたが、これは JavaScript は実行されませんでした。
(2) を『ホームページビルダー2001』でプレビューすると、

ライン 23
文字  5
エラー オブジェクトがありません

というメッセージが表示されます。『ライン 23』が『 doc_width = 
document.body.clientWidth;』の行であることは確認できています。『doc_width』が 5 カ
ラム目から始まっていますが、この変数は 17行目に定義されています。

別のスクリプトで試したときも、同様に <BODY> だとうまくいくのに <HEAD> では実行され
ず、『ホームページビルダー2001』のプレビューでもやはり同様のエラーになることがわかり
ました。
やはり何か定義のしかたに問題があるのでしょうか?以上読んでいただいて、おわかりになるこ
とがありましたら教えていただければ幸いです。どうかよろしくお願いいたします。

dairygoods 2005/09/22(木) 13:11:46
<HEAD> の解析中は、
まだ <BODY> を解析してないですから、
document.body もまだ存在しません。

body にアクセスしたければ、その部分を関数にして、
<BODY> の onLoad から呼び出してやるなどする必要があります。

さらに、フレームを使う場合、フレームのロードが終わっても、
各フレーム内のドキュメントのロードが終わっているとは限らない
という点にも注意する必要があるでしょう。

彪子 2005/09/23(金) 14:16:45
ありがとうございます。
dairygoods 様が書いてくださった説明を何度か読ませていただきましたが、私の読解力では理
解することが出来ませんでした。『body にアクセスしたければ、その部分を関数にして、 
<BODY> の onLoad から呼び出してやるなどする必要があります。』というのは、下記の 
html ソースに JavaScript をどのように挿入すればいいのでしょうか。

<!-- ここから -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<TITLE>サンプル</TITLE>
<META http-equiv=Content-Type content="text/html; charset=Shift_JIS">
<META content="IBM HomePage Builder 2001 V5.0.0 for Windows" name="GENERATOR">
<META http-equiv=Content-Style-Type content=text/css></HEAD> 
<FRAMESET 
cols=161,*><FRAME name=left src="menu.html"><FRAME name=right 
src="tourokusakuhin4.html">
<NOFRAMES>
<BODY>
<P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P>
</BODY>
</NOFRAMES></FRAMESET>
</HTML>

<!-- ここまで -->

私の力不足で理解できないのは申し訳ありませんが、何とぞよろしくお願いいたします。

dairygoods 2005/09/26(月) 11:07:50
次の二つの違いは分かりますでしょうか?

<html>
 <head>
  <script>
    alert(document.body);  // ファイル解析の途中で実行される
  </script>
 </head>
 <body>
   ...
 </body>
</html>

<html>
 <head>
  <script>
    function myfunc() {
      alert(document.body);  // ファイル全体を解析後に実行される
    }
  </script>
 </head>
 <body onload="myfunc()">
   ...
 </body>
</html>

彪子 2005/10/05(水) 19:31:21
dairygoods 様
お世話になっております。

> 次の二つの違いは分かりますでしょうか? 

二つの違いについては頭ではわかっているつもりですが、実際に

(3) http://cgi.niji.jp/home/ashizuka/postertown/snow03.htm 

を作成しましたがエラーが出ます。すみませんが、このコーディングのやり方に間違いがあるで
しょうか。
また、フレームを使ったページの場合、 onload="myfunc()" をどこに挿入すればいいのでし
ょうか。
何度も申し訳ありませんがどうかよろしくお願いいたします。

dairygoods 2005/10/07(金) 09:50:43
ドキュメントが完成した後で document.write() すると、
全体が書き換わってしまいます。

<html>
  <body>ABC<script>document.write("DEF")</script></body>
</html>

<html>
  <head>
    <script>
    function writetest() { 
      document.write("DEF");  // ABCの後ろに追加されるわけではない
    }
    </script>
  </head>
  <body onload="writetest()">ABC</body>
</html>

そうすると、定義した変数や関数や何もかもなくなってしまうということです。
なので、どうしてもこの方法で推し進めたいなら、
function writetest() {
  document.write("<html><head><script> function(以下略)");
}
のように、HTML全部を書き直さなければなりません。

フレームの場合 frameset の onload に書けますが、
その場合 body は存在しないので、彪子さんが作っているような
body に何か書くプログラムでは無意味でしょう。

彪子 2005/10/23(日) 15:23:27
[[解決]]
dairygoods 様
毎々ありがとうございます。ご返事が遅れて申し訳ありません。
dairygoods 様には、前回『偽のURLを表示させるには』でも大変ご親切に教えていただいてあ
りがとうございました。また機会がありましたらよろしくお願いいたします。

古いスレッドには追加発言できません。