- 2009-02-08 (日) 23:38
- PC・サーバー
n-modeは、基本的にXHTMLで作っているのですが、XHTMLでは「XML宣言」をすることが強く推奨されています。「XML宣言」とは、XHTMLファイルの一番最初に記述する
<?xml version="1.0" encoding="UTF-8"?>
というもの。
しかしながら、IE6(Internet Explorer 6)では、「DOCTYPE宣言」以外の記述(XML宣言)を文書先頭に書くと、レンダリングモードが過去互換になってしまうバグがあります
簡単に言うと、「XML宣言」をするとIE6は表示がおかしくなるということです。
文字コードが「UTF-8」なら「XML宣言」しなくても良いみたいなので、IE6で表示が崩れないように「XML宣言」を削除する方法もありますが、XMLアプリケーションを「XML宣言」なしで記述するのは望ましくはないですし、「XML宣言」を削除すると、W3C Markup Validation ServiceではValid判定されますが、Another HTML-lint gatewayで判定させると、「XML宣言」がないと大幅に減点されます。
減点は気分が悪いので「XML宣言」を入れることにして、相変わらずシェアの多いIE6を無視したサイト作りも避けられるよう、ブラウザにあわせて「XML宣言」をいれたり隠したりする処理を入れてみました。ブラウザのUser-Agentを見てWindowsのIE6の時だけ「XML宣言」を省略する処理を組み込みます。PHPやPerlなどのサーバーサイドプログラムを使えばできますが、どうしてもXHTMLで手軽にやりたかったので、今回はSSIを使いました。
まず、SSIを拡張子htmlでも使えるようにするため、.htaccessに以下の記述を追加します。
AddHandler server-parsed html
これで、htmlファイルでSSIを使えるようになりました。
続いて、XHTMLの冒頭記述を変更します。
変更前
<?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">
変更後
<!–#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」というファイルを別に用意します。
変更後別パターン
<!–#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宣言の後に改行を入れておくことがポイントです
。改行を入れることで、IE6以外のブラウザでアクセスした場合に、「XML宣言」と「DOCTYPE宣言」が1行目と2行目に入ってキレイ
n-modeをIE6とFirefox等のブラウザでアクセスしてみて下さい。ソースを表示すると、IE6側だけはXML宣言がないはずです。
こちらの関連記事もどうぞ!
- 携帯からのアクセス制限 (422views)
- Apache2でのheadersモジュール組み込み (885views)
- Apache2でのSSL対応 (865views)
- 絵文字対応プラグイン(MT4.2) (759views)
- CGIを他のディレクトリで動かすための設定 (441views)
- Newer: バレンタイン
- Older: 新卒イベント(大阪)
コメント:0
トラックバック: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
