ふろしき Blog

コンテンツサービスを科学する株式会社ブートストラップ代表のブログ

XHTML1.0の場合、IE6からIE8〜10への移行時に表示が乱れることがある

XHTML1.0のDOCTYPE宣言にはいくつか種類があり、IE7以上では常に最新のレンダリングエンジンである「標準モード」として動作します。しかし、IE6は一部の宣言方法で一番古いレンダリングエンジンである「Quirksモード」として動作してしまいます。
(※参考 : The <?xml> prolog, strict mode, and XHTML in IE - IEBlog )

IEには古いレンダリングエンジンを再現させるドキュメントモードという機能が備わっており、「互換表示ボタン」「互換表示リスト」「ローカルネット互換表示」「X-UA-Compatible」などを通じてドキュメントモードを制御し、新しいバージョンへ移行させることが多いでしょう。しかし、これらの機能はDOCTYPEスイッチの切り替えアルゴリズムまでは再現してくれず、問題となるケースがあります。

具体的には、以下の通りです。

6 8〜10 DOCTYPE宣言
S S <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Q S <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
S S <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Q S <?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">
S S <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
Q S <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

IE6でテストされたWebシステムを開発していた際に、開発者が誤動作に気が付かず「Quirksモード」を前提に画面のレイアウトを作りこむと、IEのバージョンアップ時に挙動がおかしくなることがあります。

移行時の対策

誤動作によりXHTMLドキュメントをQuirksモードで動作させてしまっている場合、IE8以上ではX-UA-Compatibe以外からQuirksモードを再現させる方法はありません。このため、サーバ管理者はシステムを動作させているAP製品に対して、HTTP Response Headerへ以下のパラメータを応答させるよう設定が必要になります。

X-UA-Compatible: IE=5

より詳細な設定の方法については、以下のページを参照して下さい。

どういうケースが想定されるか?

この事象は、決してレアケースというわけではありません。

業務系で利用されるServer-side Scriptingの既定は、HTML5のような新しいWeb標準を利用する場合でも、XHTMLに沿って記述することが多いです。JavaのJSFもまさにそうでしょう。

DOCTYPE宣言は、XHTML1.0で宣言しても、HTML5の機能を利用することが可能です。IEも含め多くのWebブラウザは、XHTML1.0、HTML5、どちらの宣言を行っても、同じレンダリングエンジンが選択されるようにできています。HTML5は一部の廃止タグを除き、XHTML1.0と相互運用可能な言語仕様になっているため問題になりません。

f:id:furoshiki0223:20131205200136p:plain

Webブラウザ以外のソフトウェアからHTMLを読み込ませる場合、XMLパースが行える方が便利でしょう。この場合、XML宣言が行えるXHTML1.0のDOCTYPE宣言は、非常に有用なものとなります。XML宣言は本来任意ですが、無いと動作しなパーサものもあります。素直にHTML5のDOCTYPE宣言を行いたいところですが、XMLパーサの活用を考えると、今後もあえてXHTMLのDOCTYPE宣言を行うということは少なくないはずです。

IE6向けシステムは、JSPのような古い技術を利用していた場合は問題になりません。しかし、それこそJSFのような新しい技術を使って強引に動作させようとすると、何かしらの問題を作りこむ可能性を持ちます。IEのバージョンの世代と、サーバ技術の世代に開きが大きい場合は、注意して下さい。

このブログの筆者について

川田 寛

コンテンツサービスの開発や運営代行を専門とする集団「株式会社ブートストラップ」の社長です。ネットではふろしきと呼ばれています。

2009年にNTTグループへ新卒入社し、ITエンジニアとしてクラウド技術・Web技術の研究開発と技術コンサルティングに従事。2015年よりピクシブに入社し、エンジニアリングマネージャー・事業責任者・執行役員CCOなど、様々な立場からコンテンツサービスの事業づくりに関わりました。2021年にメディアドゥへVPoEとしてジョインし出版関係の事業に関わったのち、2023年に独立しています。

関わってきたインターネット事業としては、ECサービスのBOOTH、UGCプラットフォームのpixiv(主に海外展開)、制作ツールのpixiv Sketch、VR・VTuber関連ではVRoid、Wikiサービスのピクシブ百科事典など、10を超える多様なCtoCコンテンツサービス。また、NTTドコモのすご得コンテンツ、メディアドゥのWeb3サービスであるFanTopなど、いくつかのBtoCコンテンツサービスにも関わってきました。

幸運なことに、私はコンテンツに関係する幅広いインターネットサービスのテクノロジー&ビジネスの知識を得ることができました。これを日本のコンテンツ発展に役立てたいと思い、株式会社ブートストラップを創業しました。

このブログでは現在、出版社やIPホルダー、ライセンサーといったコンテンツに関わる人々に向けて、インターネット事業に関するTipsや業界内のトレンドなどの情報を発信しています。私と話をしてみたいという方は、以下のフォームより気軽にご連絡ください。

お問い合わせフォーム