2009年3月13日の投稿

FireMobileSimulator は style 要素の CDATA を解釈しない?
ドコモの HTML-XHTML 比較表 (PDF) を見ていると、style 要素の中身は CDATA セクションに入れるようになっていました。確かに、XHTML では style 要素の中身が PCDATA となったため、どんな文字が来ても問題ないようにするには CDATA セクションで囲む方がよいでしょう (HTML 4.0.1 までは style 要素は CDATA でした)。
ということで、Ktai Style 1.71-beta2 を出したものの、Ktai Style の附属テーマおよび、XHTML インラインスタイルシート変換機構でも、style 要素の中身を CDATA セクションで囲むことにしてみました (Ktai Style 1.71 正式版で採用予定)。ところが、動作確認をしようと FireMobileSimulator を使ってみると、リンク色の指定が反映されません。リンク色は、まさに style 要素で指定しているので、CDATA 絡みの挙動が原因ですね。同じ Firefox 拡張の User Agent Switcher ではリンク色の指定が反映されているので、FireMobileSimulator が CDATA セクションを無視する処理をわざわざ入れているのでしょう。
携帯電話の実機では、FOMA, EZweb, ソフトバンク 3G どれもリンク色が反映されています。つまり、style 要素内を CDATA セクションに入れるのは正しいわけです。うーん、FireMobileSimulator の処理が正しくないということになりますね。これは不便なので、作者に報告して改修してもらわないと……。
[追記] Ktai Style での「style 要素の中身を CDATA セクションで囲む」という変更ですが、同時にインラインスタイルシートを1つにまとめることもやっています。EZweb, ソフトバンク 3G ではテーマの header.php でインラインスタイルシートを挿入していますが、それと body 要素の link, alink, vlink 属性→ style 要素への変換によるインラインスタイルシートとは独立になっていました (head 要素に <style ... /style> が2回出る)。今回、Head Cleaner を見習って、body→style への変換時に、すでに style 要素があれば (EZweb, ソフトバンク 3G の場合)、そこに追記する仕掛けにしてみました。ただし、Head Cleaner のように、CDATA セクションの開始・終了部分をスタイルシートにするハックは入れませんでした。
<style type="text/css"> /*<![CDATA[*/ ... /*]]>*/ </style>
携帯端末の場合なくても問題ないですし、入れることに疑問を感じたためです (入れると文法違反になるかどうかは未調査です)。
[さらに追記] JavaScript の場合、以下のようにCDATA の宣言を1行コメントにする方がよいようです。
<script type="text/javascript"> //<![CDATA[ ... //]]> </script>
でも、スタイルシートの場合、CDATA 宣言の前後をコメントで囲うのが微妙な感じです。ひょっとすると、/* <![CDATA[ (単なる文字列) ]]> */ のように解釈されて、スタイルがコメント扱いになってしまうのではないでしょうか??



上に戻る