2009年3月13日の投稿

2009-03-13
晴れ一時雨

FireMobileSimulator は style 要素の CDATA を解釈しない?

ゆりこ による 19:49:07 の投稿
カテゴリー: WordPressハック,ソフトウェア
タグ: , ,

ドコモの HTML-XHTML 比較表 (PDF) を見ていると、style 要素の中身は CDATA セクションに入れるようになっていました。確かに、XHTML では style 要素の中身が PCDATA となったため、どんな文字が来ても問題ないようにするには CDATA セクションで囲む方がよいでしょう (HTML 4.0.1 までは style 要素は CDATA でした)。

FireMobileSimulator ではリンク色がデフォルト
User Agent Switcher ではリンク色が反映

ということで、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[ (単なる文字列) ]]> */ のように解釈されて、スタイルがコメント扱いになってしまうのではないでしょうか??