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