scriptタグをって書くと、なんで上手くいかないかまとめてみた
- これは何?
-
HTMLにて以下のようにscriptタグを書いた所、それ以降のscriptが正常に認識されませんでした
(Firefox3.0, IE7にて再現。Google Chromeでは何故か正しく動作)
<script type="text/javascript" src="〜.js" /> <script type="text/javascript"> "ここのコードが読み込まれなかった!" </script>
んで、原因を色々調べたところ、HTML4.1ではこういう書き方だと、閉じタグが無いものと認識されることが判明
以降、なんでそれがダメかをまとめます
正しくは、こう書く <script type="text/javascript" src="〜.js"></script> <script type="text/javascript"> "ここのコードが読み込まれなかった!" </script>
- 注意点
2009/06/16時点でのXHTML1.1, HTML4.01を基準に話を進めてます
以降のバージョンが標準になった場合、話が変わる可能性があるので注意してください
- なんで?<br/>とか書いてもOKじゃない?
2つ勘違いをしてます
- </br> という書き方は、XHTMLの書き方で、HTMLの書き方ではない
- br は空要素だが、script は空要素ではない
- 空要素
<img> や <br> のように内容を持たない要素の事を空要素といいます
んで、空要素については、<br /> のような書き方が、HTML, XHTML 共々許されていますが(後述)、
<script src""〜.js"> のような、内容を持ちうるが、今回は中身が空である要素については、きちんと終了タグを書かないといけません
どの要素型宣言も、概して、3つの部分を記す。開始タグ、内容、終了タグ、である。 〜 中略 〜 HTML要素型の中には、著者が終了タグを省略することを許容するものもある。(例えば、P要素型やLI要素型)。
On SGML and HTML (ja) - 3.2.1 要素
終了タグの有無(空要素であるかどうか)については、各要素のリファレンスに書かれているのでそちらを参照
Index of the HTML 4 Elements
- XHTMLとHTMLの違い
XHTML
XHTMLっていうのは、HTML の文法を元ネタである XML の文法にあわせて、XMLパーサでも読めるようにして、汎用性を上げようって考えの元作られているようです
んで、XML の文法として、全てのタグは閉じないといけないので、brタグとかは以下のような記述となります
<br></br> <img src="01.jpg"></img>
但し、それだと今まで HTML 書いてた人には違和感がある為、空要素については、以下のような書き方も許容しています
<br/> <img src="01.jpg"/>
詳しくはこの辺参照
(最新は1.1なのだけど、w3cの1.1で言及してるところが見つからなかったので、こちらで我慢)
XHTML 1.0: 拡張可能ハイパーテキストマークアップ言語 4. HTML4との相違点
なので、<br/> という書き方は XHTML の文法ってことはOKでしょうか
HTML
んで、HTML だと、空要素タグに閉じタグをつけることは許されません
HTMLの要素型には、内容が存在しないものもある。例えばline breakの要素 BRには内容がない。その唯一の役割は、テキストに含まれる1つの行の終端を示すことである。このような 空要素は、終了タグを絶対に持たない。
On SGML and HTML (ja) - 3.2.1 要素
こういう書き方はNG! 大半のブラウザでは、<br>が2個あると判断される <br></br> <img src="01.jpg"></img>
但し、<br/> という書き方は / の前にスペースをつければ、HTML でも、XHTMLでも正しく認識される旨が、書かれています
たとえば <br /> や <hr />, <img src="karen.jpg" alt="Karen" /> といったように、空要素の末尾の / と > との前にスペースを1個組み込むこと。また、たとえば <br /> といったように、空要素には最小化タグ文法を使うこと。これは、XMLで許容されている代わりの文法 <br></br> は、多くの既存のユーザエージェントでは与えられる結果が一定しないからである。
XHTML 1.0: 拡張可能ハイパーテキストマークアップ言語 - 付録C. HTML互換性ガイドライン
これなら、XHTML、HTML両方でOK <br /> <img src="01.jpg" />
- おまけ
現状、ブラウザにXHTMLを認識させるには、ヘッダでの宣言以外に、拡張子を.hxtmlにした方がベターかも
- 参考リンク
- XHTML 1.0: 拡張可能ハイパーテキストマークアップ言語
- HTML 4.01 Specification (ja)
- XML空要素タグのHTML的解釈・付記 - 徒書
そんなかんじー