2005-10-18

XHTML の script 要素の閉じタグでハマった

body 要素の中に script 要素を入れると、script 要素の直後に、head 要素の閉じタグと body 要素の開きタグが挿入され、結果として script 要素より前のテキストが無視される現象に出会った ( firefox 1.0.7)。具体的なコードを書くと、

<body>
foo bar something
<script type="text/javascript"></script>
FOO BAR ANYTHING
</body>

を、 firefox は次のように解釈する。

<body>
foo bar something
<script type="text/javascript"></script>
</head><body>
FOO BAR ANYTHING
</body>

この場合、前半の foo bar something はブラウザーに表示されない。

原因は head 要素内の script 要素

原因は、head 要素内の次の script 要素だった。

<head>
 <title>foo</title>
 <script type="text/javascript" src="bar.js"/>
</head>

見てお分かりだろうか? script 要素の閉じタグがない。XHTML では、HTML で許されていた <br> のような閉じタグの省略が許されなくなった。そのため、厳密には <br></br> のように閉じタグが必要になった。でも、それじゃあ面倒だってんで、 <br/> のような書き方も許されている。

そこで、script 要素も (要素の中身が空なら) 同じ書き方が出来るだろう、と

 <script type="text/javascript" src="bar.js"></script>

 <script type="text/javascript" src="bar.js"/>

のように書いたわけ。確かにこの書き方は、本文中に script 要素の閉じタグが現れるまでは動いた。でも、body 要素内に script 要素の閉じタグが現れたとたん、head 要素内の script 要素は閉じていない、と firefox に解釈されてしまったらしい。そしてご丁寧にも、head 要素の閉じタグと body 要素の開きタグまで挿入してくれちゃったわけ。

XHTML の仕様をまだ確認していないのだけど、任意の要素を <div/> のように書くのは許されていないのかしらん。

今夜はこいつのおかげでえらい目に遇った...

No comments:

Post a Comment