WEB相談室

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

タイトル:javascipt と CSS と HTML のコメント

0:[投稿] B-Cus [2003/12/02 19:52 ][環境:なんでも なんでも]

javascipt は
  <script type="text/javascript">
  <!--
  // -->
  </script>
と書きますが (--> の前に // を付ける)、CSS は
  <style type="text/css">
  <!--
  -->
  </style>
と書きます (--> の前に // を付けてはならない)。


質問 1

<script type="text/javascript">〜</script> が javascript の
パーザに渡されるが、Javascript のパーザが --> を認識して文法
違反としないように、Javascript のコメントである // を付ける、
と思っています。では <!-- は問題ないんでしょうか?


質問 2

CSS であっても --> は文法エラーだと思うのですが、CSS の場合は
なぜ --> の前に // を付けてはならないのでしょうか? CSS では
/*〜*/ しかコメントがなくて、// をコメントにしようがないから?


質問 3

HTML のコメントは
  http://www.asahi-net.or.jp/~bd9y-ktu/jp_f/misc/comment.html
というふうに書かなければいけませんが、

  <script type="text/javascript">
  <!--
  i--;
  -->
  </script>

というのは問題ないのでしょうか?


質問 4

そもそも
  <!-- --> は HTML としてはコメントなのに、その内容が
  JavaScript や CSS としてパースされる (JavaScript・CSS
  のパーザに渡される)
ということ自体がいまいちしっくりきません。コメントであるのに
実際には処理されるというのは、規格的にはどう表されているので
しょうか?


1:[回答] [2003/12/02 21:11 ]

> 質問1:
//<!-- にすると未対応ブラウザで // が表示されてしまうので
なくても大丈夫にしているのだと思いますが
本家のマニュアルでもこの程度の表記しかありません。
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/embed.html#1013248

> 質問2:
http://www.swlab.csce.kyushu-u.ac.jp/man/rec-css2/grammar.html#q1
文法エラーではないからです。

> 質問3:
質問4で挙げた理由で、
SCRIPT要素に対応しているHTMLのUAならば問題ありませんが、
SCRIPT要素に未対応でコメントを正しく解釈できるHTMLのUAでは
コメントの解釈でエラーが発生するでしょう。

> 質問4:
http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/types.html#idx-CDATA-1
最初に出現する </ までを要素の内容とすることになってます。
# XHTMLでは内容がCDATAから#PCDATAになったので
# コメントにするとホントに処理されません。


2:[質問] B-Cus [2003/12/02 22:54 ]

大変よくわかりました (わかったつもりかもしれませんが)。
ありがとうございます。

>> 質問1
javascript における <!-- については、実装レベルで無理矢理
つじつまをあわせているという感じでしょうか。

ECMA-262 にも <!-- に関する記述は特にないようですね。
 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/index.html

>> 質問2
CSS では <!-- は CDO、--> は CDC とみなされ、いずれも空白・
改行と同じ扱いになるということですね。

>> 質問3
> 最初に出現する </ までを要素の内容とすることになってます。
ということは、
  <script type="text/javascript">
  document.write('</hoge>');
  </script>
は文法違反であると。

と思ったら、
 http://www.ne.jp/asahi/minazuki/bakera/html/reference/dataformat#cdata
  もっとも、現実にはこれを正しく実装しているブラウザは存在しませんから、
  あまり心配しなくて良いのかもしれません。
という記述を見つけました。Mozilla-1.6b で
  <html><body>
  <script type="text/javascript">
  document.write('a');
  document.write('</hoge>');
  document.write('b');
  </script>
  </body></html>
を見ると「ab」と表示されましたので (Full Standard Mode でも同じ)、
やはり規格どおりの実装にはなっていないようでした。


追加の質問 5

http://www.scollabo.com/banban/magazine/magazine_027.html には
 このスタイルシートやJavaScriptの記述内容は、CDATAとして扱われます。
 このCDATAでは実体参照の使用が許されていません。必ず、実体参照符合を
 利用しなければならないのです。(略)
 スクリプト内で、& や > を用いる場合には、 CDATAとして違反となります。
 この場合、スクリプトを外部に置くように推奨されています。
とありますが、これは誤りで、CDATA 内に & や > を書くことは
許されていますよね?


3:[回答] J [2003/12/03 10:01 ]

http://www.asahi-net.or.jp/~bd9y-ktu/html4rec_f/appendix/notes.html#h-B.3.2
によるとCDATAは要素内容では字体参照を許さないが、属性値では許すとなっています。
なにぶん英語ができないもんで、原文は見てもいないですが、
この「許す」「許さない」という訳を私なりに解釈すると、
要素内容の場合は字体参照しないでそのまま(ただの文字列)で属性値では字体参照するってことだと思いました。
よってスクリプトタグ内(要素内容)に&や>を書いてもいいし、&amp;などは字体参照にならずそのままの文字列として扱われるのではないかと思います。


4:[回答] [2003/12/03 16:26 ]

> 質問5
実体参照というのは文字を記述するための「&xxx;」のような表現を指しますが、
そのメールマガジンの著者は
「&」「>」といった文字そのものを「実体参照」と呼称しているフシがあります。
そういう理解で >>3 に挙げられた部分を読んで
「スクリプト内に & や > は書けない」という誤解をしたのではないでしょうか。

>>3 の理解で正しいです。
HTML4ではscript/style要素内に「&」も「>」も余裕で書けます。
「>」にいたっては内容モデルが#PCDATAの要素内であっても
そのまま書いて全く問題ありません。


5:[完了] B-Cus [2003/12/06 05:35 ]

なるほど、よくわかりました。解決です。

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


6:[完了] yuu [2003/12/06 16:48 ]

質問1について。
HTML4対応を謡いつつ、かつJavaScriptを解釈できるというブラウザであれば、そのブラウザのスクリプトエンジンはscript要素の先頭に「<!--」が存在することを許容し、かつ先頭の「<!--」以降行末までを無視する必要があります。

http://www.w3.org/TR/1999/REC-html401-19991224/interact/scripts.html#h-18.3.2
>Commenting scripts in JavaScript
The JavaScript engine allows the string "<!--" to occur at the start of a SCRIPT element, and ignores further characters until the end of the line. JavaScript interprets "//" as starting a comment extending to the end of the current line. This is needed to hide the string "-->" from the JavaScript parser.


7:[完了] B-Cus [2003/12/09 20:07 ]

ありがとうございます。日本語訳は↓ですね。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/scripts.html#h-18.3.2

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World