Home > PC・サーバー > IE6でのXML宣言バグ対処

IE6でのXML宣言バグ対処


n-modeは、基本的にXHTMLで作っているのですが、XHTMLでは「XML宣言」をすることが強く推奨されています。「XML宣言」とは、XHTMLファイルの一番最初に記述する

<?xml version="1.0" encoding="UTF-8"?>

というもの。
しかしながら、IE6(Internet Explorer 6)では、「DOCTYPE宣言」以外の記述(XML宣言)を文書先頭に書くと、レンダリングモードが過去互換になってしまうバグがありますicon:dcm_009
簡単に言うと、「XML宣言」をするとIE6は表示がおかしくなるということです。
文字コードが「UTF-8」なら「XML宣言」しなくても良いみたいなので、IE6で表示が崩れないように「XML宣言」を削除する方法もありますが、XMLアプリケーションを「XML宣言」なしで記述するのは望ましくはないですし、「XML宣言」を削除すると、W3C Markup Validation ServiceではValid判定されますが、Another HTML-lint gatewayで判定させると、「XML宣言」がないと大幅に減点されます。icon:dcm_021
減点は気分が悪いので「XML宣言」を入れることにして、相変わらずシェアの多いIE6を無視したサイト作りも避けられるよう、ブラウザにあわせて「XML宣言」をいれたり隠したりする処理を入れてみました。ブラウザのUser-Agentを見てWindowsのIE6の時だけ「XML宣言」を省略する処理を組み込みます。PHPやPerlなどのサーバーサイドプログラムを使えばできますが、どうしてもXHTMLで手軽にやりたかったので、今回はSSIを使いました。
まず、SSIを拡張子htmlでも使えるようにするため、.htaccessに以下の記述を追加します。

AddHandler server-parsed html

これで、htmlファイルでSSIを使えるようになりました。
続いて、XHTMLの冒頭記述を変更します。
icon:dcm_016変更前

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

icon:dcm_016変更後

<!–#if expr="$HTTP_USER_AGENT != /MSIE 6.0/ || $HTTP_USER_AGENT != /Windows/ " –><?xml version="1.0" encoding="UTF-8"?>
<!–#endif –><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

もしくは、「XML宣言」を別ファイルにしてIE6以外の場合のみ読み込むようにします。以下の例では「xml.inc」というファイルを別に用意します。
icon:dcm_016変更後別パターン

<!–#if expr="$HTTP_USER_AGENT != /compatible; MSIE 6/" –><!–#include virtual="/xml.inc"–><!–#endif –><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

この記述には改行を入れません。IE6でアクセスした場合に、空白の1行が頭にできてしまうのを防ぐためです。
xml.incファイルには、「XML宣言」を記述します。

<?xml version="1.0" encoding="UTF-8"?>

XML宣言の後に改行を入れておくことがポイントですicon:dcm_230。改行を入れることで、IE6以外のブラウザでアクセスした場合に、「XML宣言」と「DOCTYPE宣言」が1行目と2行目に入ってキレイicon:dcm_015
n-modeをIE6とFirefox等のブラウザでアクセスしてみて下さい。ソースを表示すると、IE6側だけはXML宣言がないはずです。

こちらの関連記事もどうぞ!

コメント:0

コメントフォーム
Remember personal info

icon:dcm_252 icon:dcm_251 icon:dcm_250 icon:dcm_249 icon:dcm_248 icon:dcm_247 icon:dcm_246 icon:dcm_245 icon:dcm_244 icon:dcm_243 icon:dcm_242 icon:dcm_241 icon:dcm_240 icon:dcm_239 icon:dcm_238 icon:dcm_237 icon:dcm_236 icon:dcm_235 icon:dcm_234 icon:dcm_233 icon:dcm_232 icon:dcm_231 icon:dcm_230 icon:dcm_229 icon:dcm_228 icon:dcm_227 icon:dcm_226 icon:dcm_225 icon:dcm_224 icon:dcm_223 icon:dcm_222 icon:dcm_221 icon:dcm_220 icon:dcm_219 icon:dcm_218 icon:dcm_217 icon:dcm_216 icon:dcm_215 icon:dcm_214 icon:dcm_213 icon:dcm_212 icon:dcm_211 icon:dcm_210 icon:dcm_209 icon:dcm_208 icon:dcm_207 icon:dcm_206 icon:dcm_205 icon:dcm_204 icon:dcm_203 icon:dcm_202 icon:dcm_201 icon:dcm_200 icon:dcm_199 icon:dcm_198 icon:dcm_197 icon:dcm_196 icon:dcm_195 icon:dcm_194 icon:dcm_193 icon:dcm_192 icon:dcm_191 icon:dcm_190 icon:dcm_189 icon:dcm_188 icon:dcm_187 icon:dcm_186 icon:dcm_185 icon:dcm_184 icon:dcm_183 icon:dcm_182 icon:dcm_181 icon:dcm_180 icon:dcm_179 icon:dcm_178 icon:dcm_177 icon:dcm_176 icon:dcm_175 icon:dcm_174 icon:dcm_173 icon:dcm_172 icon:dcm_171 icon:dcm_170 icon:dcm_169 icon:dcm_168 icon:dcm_167 icon:dcm_166 icon:dcm_165 icon:dcm_164 icon:dcm_163 icon:dcm_162 icon:dcm_161 icon:dcm_160 icon:dcm_159 icon:dcm_158 icon:dcm_157 icon:dcm_156 icon:dcm_155 icon:dcm_154 icon:dcm_153 icon:dcm_152 icon:dcm_151 icon:dcm_150 icon:dcm_149 icon:dcm_148 icon:dcm_147 icon:dcm_146 icon:dcm_145 icon:dcm_144 icon:dcm_143 icon:dcm_142 icon:dcm_141 icon:dcm_140 icon:dcm_139 icon:dcm_138 icon:dcm_137 icon:dcm_136 icon:dcm_135 icon:dcm_134 icon:dcm_133 icon:dcm_132 icon:dcm_131 icon:dcm_130 icon:dcm_129 icon:dcm_128 icon:dcm_127 icon:dcm_126 icon:dcm_125 icon:dcm_124 icon:dcm_123 icon:dcm_122 icon:dcm_121 icon:dcm_120 icon:dcm_119 icon:dcm_118 icon:dcm_117 icon:dcm_116 icon:dcm_115 icon:dcm_114 icon:dcm_113 icon:dcm_112 icon:dcm_111 icon:dcm_110 icon:dcm_109 icon:dcm_108 icon:dcm_107 icon:dcm_106 icon:dcm_105 icon:dcm_104 icon:dcm_103 icon:dcm_102 icon:dcm_101 icon:dcm_100 icon:dcm_099 icon:dcm_098 icon:dcm_097 icon:dcm_096 icon:dcm_095 icon:dcm_094 icon:dcm_093 icon:dcm_092 icon:dcm_091 icon:dcm_090 icon:dcm_089 icon:dcm_088 icon:dcm_087 icon:dcm_086 icon:dcm_085 icon:dcm_084 icon:dcm_083 icon:dcm_082 icon:dcm_081 icon:dcm_080 icon:dcm_079 icon:dcm_078 icon:dcm_077 icon:dcm_076 icon:dcm_075 icon:dcm_074 icon:dcm_073 icon:dcm_072 icon:dcm_071 icon:dcm_070 icon:dcm_069 icon:dcm_068 icon:dcm_067 icon:dcm_066 icon:dcm_065 icon:dcm_064 icon:dcm_063 icon:dcm_062 icon:dcm_061 icon:dcm_060 icon:dcm_059 icon:dcm_058 icon:dcm_057 icon:dcm_056 icon:dcm_055 icon:dcm_054 icon:dcm_053 icon:dcm_052 icon:dcm_051 icon:dcm_050 icon:dcm_049 icon:dcm_048 icon:dcm_047 icon:dcm_046 icon:dcm_045 icon:dcm_044 icon:dcm_043 icon:dcm_042 icon:dcm_041 icon:dcm_040 icon:dcm_039 icon:dcm_038 icon:dcm_037 icon:dcm_036 icon:dcm_035 icon:dcm_034 icon:dcm_033 icon:dcm_032 icon:dcm_031 icon:dcm_030 icon:dcm_029 icon:dcm_028 icon:dcm_027 icon:dcm_026 icon:dcm_025 icon:dcm_024 icon:dcm_023 icon:dcm_022 icon:dcm_021 icon:dcm_020 icon:dcm_019 icon:dcm_018 icon:dcm_017 icon:dcm_016 icon:dcm_015 icon:dcm_014 icon:dcm_013 icon:dcm_012 icon:dcm_011 icon:dcm_010 icon:dcm_009 icon:dcm_008 icon:dcm_007 icon:dcm_006 icon:dcm_005 icon:dcm_004 icon:dcm_003 icon:dcm_002 icon:dcm_001

トラックバック:0

このエントリーのトラックバックURL
http://n-mode.ddo.jp/weblog/2009/02/20090208.html/trackback
Listed below are links to weblogs that reference
IE6でのXML宣言バグ対処 from Ryota Weblog

Home > PC・サーバー > IE6でのXML宣言バグ対処

アクセスカウンタ
アクセスカウンター
過去の記事

Return to page top