Hatena::Groupsubtech

ういはるかぜの化学

Monday, September 19, 2011

Internet Explorer互換表示リスト 23:32 Internet Explorerの互換表示リスト - ういはるかぜの化学 を含むブックマーク はてなブックマーク - Internet Explorerの互換表示リスト - ういはるかぜの化学

IEには8以降で互換表示(IE7モードIE8モードIE9モードなど)があり、アクセスしたサイト自動的に発動できるよう対象ドメインリスト化したXMLがあります

no title

まあこれはユーザー製作者がいじれるという話ではないのですがどういうことが書いてあって何が起こるのか気になったのでちょっと見てみました。

まずIE9互換表示リストはこんな感じになっています

http://ie9cvlist.ie.microsoft.com/ie9cvlist.xml

<?xml version="1.0" encoding="UTF-8"?>
<ie9compatlistdescription xmlns="http://www.microsoft.com/schemas/ie9compatlistdescription/1.0">
  <version>1000000000000000000</version>
  <ttl>1</ttl>
  <domain>example.com</domain>
  ...
</ie9compatlistdescription>

基本的にdomain要素が並んでいるだけです属性がついていたりしていくつかパターンがあります

ためしにそれぞれのパターンで指定されているサイトにIE10(Windows Developer Preview)でアクセスしてみたのでどうなるか見てみました。IE10なので互換表示リストもちょっと違うのですが大体同じです

<domain>hatena.ne.jp</domain>

domain要素で指定されていて何も指定されていないパターンです

URL
http://www.hatena.ne.jp/
User-Agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C)
Browser Mode
Browser Mode: IE10 Compat View, Document Mode: IE7 standards

domain要素だけの場合にはIE7User-Agentでリクエストが発生し、IE7相当の処理となります(なので場合によってはQuirksモードにもなる)。

<domain docMode="EmulateIE8">adobe.com</domain>

domain要素のdocMode属性にEmulateIE8またはEmulateIE7、EmulateIE9などが指定されているパターンです

URL
http://www.adobe.com/
User-Agent
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Browser Mode
Browser Mode: IE10, Document Mode: IE8 standards

この場合リクエスト時のUser-AgentはIE10(またはIE9IE8)になって、表示する際のモードIE8IE7などのブラウザ相当の処理となります

<domain docMode="EmulateIE8" uaString="8" versionVector="8">real.com</domain>

docMode属性に加え、uaString属性とversionVector属性が指定されているパターンです

URL
http://jp.real.com/
User-Agent
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; WOW64; Trident/4.0; .NET4.0E; .NET4.0C)
Browser Mode
Browser Mode: IE8, Document Mode: IE8 standards

この場合リクエスト時のUser-AgentはuaStringで指定されたバージョンとなります。ここではuaStringが8なのでUser-AgentはIE8になっています。そしてdocModeがEmulateIE8なのでドキュメントモードの判定はIE8相当となります

まりUser-AgentはIE8相当、ドキュメントモード判定もIE8相当」なのでサイトからIE8アクセスされているように見えます

このような処理が入っている背景には、User-Agentを見てCSSJavaScriptの読み込みを制御するものサーバーサイド(というかHTML)に入っている場合があるからと思われます

<domain featureSwitch="createElementWithMarkup:false">youtube.com</domain>

featureSwitch属性が指定されているパターンです

IE9からfeatureSwitch属性というものが増え、それが指定されているパターンです。これはAPIの振る舞いを変更するという涙ぐましい設定です。現状ではcreateElementWithMarkupという値しかとりません。

以前のバージョンではdocument.createElement メソッドに"<a>"のような要素名ではなくタグを書いての生成ができていたのですが、IE9標準モード以降は許されなくなりエラーとなるようになりました。ですが、このcreateElementWithMarkupが指定されているとなんとIE9/IE10標準モードでも動きます互換性…。

f:id:mayuki:20110919231038p:image

URL
http://www.youtube.com/
User-Agent
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Browser Mode
Browser Mode: IE10, Document Mode: IE10 standards

<domain uaStringImmersive="iPad">mashable.com</domain>

uaStringImmersive属性が指定されているパターンです

IE9互換表示リストにはないのですが、IE10の互換表示リストにはuaStringImmersive属性がついているパターンがあります

これはuaStringImmersiveの名があらわす通りImmersive Mode、つまりMetro style AppのIEで表示するときUser-Agentの指定ですしかも8とか9ではなくiPadとかFirefox 5とかChrome 12とか書かれています

これはMetroスタイルで使っているときiPad的なビューになってほしいとかそういうのかなと思うのです真相はよくわかりません(Developer Previewだし変わるかも)。

URL
http://mashable.com/
User-Agent
Mozilla/5.0 (iPad; Windows NT 6.2; Trident/6.0) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10

URL
http://tv.slashgear.com/
User-Agent
Mozilla/5.0 (Windows NT 6.2; Trident/6.0; rv:5.0) Gecko/20100101 Firefox/5.0

URL
http://www.standaard.be/
User-Agent
Mozilla/5.0 (Windows NT 6.2; Trident/6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30