2007-03-19

MSIE7のバグ

Microsoft社から公開されたMSIE7──。同社が今年1月末に発売した Windows Vista には、MSIE7を標準搭載しています。

1月26日のひとりごとで記載したように、私は自作PCにVistaを導入しました(パソコン自作備忘録)。実際に正式版のMSIE(32ビット & 64ビット版)を使用した感想ですが、見事に期待が裏切られました。というか、「やっぱりその程度か~・・・。」って感じです。最新のMSIE7では、セキュリティ強化も然る事ながら、RSSへの対応や各種仕様に対する準拠性も向上しました。とは言え、Mozillaのようなウェブ標準準拠には程遠いです。私が2年前にIE 7.0はタブ付きブラウジング機能を搭載という記事を掲載しましたが、私が期待していたXHTMLapplication/xhtml+xml 媒体型)への対応もまだです。XHTML仕様が勧告されて何年も経つのになぁ・・・。

ところで、CSS2CSS21では、UAのエラー処理動作についての規定(Error conditions [引用: http://www.w3.org/TR/CSS21/conform.html#q3 より] )が記載されています。それによると、仕様ではUAのエラー処理動作を規定しないが、rules for handling parsing errors [引用: http://www.w3.org/TR/CSS21/syndata.html#parsing-errors より] の内容には従わなければなりません。rules for handling parsing errors [引用: http://www.w3.org/TR/CSS21/syndata.html#parsing-errors より] では、CSS記述の不正箇所は無視(不正箇所が存在しないかのように動作)するように定められています。これは、CSS記述者による記述の誤りやUAが対応しないプロパティーや値があれば、UAは各不正についてはその規則に従わなければなりません。ですから、CSS2に不完全対応のUAでは、UAが処理できないプロパティーや値などがあれば、仕様の規定によりその宣言を無視して処理を行います。

然しながら、MSIE7にはバグがあり、MSIE7が未対応のcontentプロパティの値の指定にcounters()関数がある場合に、解析処理がそこで中断(以降の記述も完全無視)してしまうことに私は気付きました。もしかすると、同類のバグが他にもあるかも知れません。このMSIE7のバグへの対処法としては、counters()関数を含む宣言をなるだけ下げるしかありません。

カウンタの入れ子のデモ (HTML/XHTML)
  • Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
  • Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90)
  • Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Win64; x64; .NET CLR 2.0.50727; SLCC1; Media Center PC 5.0)

デモのX/HTMLファイルには、リストの自動番号振りの記述の後にbody要素の背景色と前景色(文字色)を指定する宣言をstyle要素に記述しています。詳細はデモファイルのソースを見て下さい。

CSS2に対応しているUA(Mozilla等)では、入れ子構造リストに "1", "1.1", "1.1.1" という番号が振られ、body要素の背景色は黒、前景色は白というように適用されます。CSS2への対応が不完全なUA(MSIE6等)では、入れ子構造リストの番号付けの宣言は規定通りに無視します。然しながら、MSIE7では、リストに関する宣言で解析が中断してしまいます。これは明らかにバグです。

このMSIE7のバグは、XML/XHTMLだと発生しないようです。実際にMSIE7にてカウンタの入れ子のデモ XML版XSLにより、application/xhtml+xmlで送信します)を試してみて下さい。