Flex+BlazeDS+AMFの組み合わせで動作するシステムの構築をしていたおり
どうもIE11限定でFlashPlayer側の挙動がおかしくメッセージングが正常に動作せず、どうしたものかと頭を抱えていました。
……が、どうもIE11側で互換設定を有効にすると正常に動作する事が最近分りましたので
IE側の設定なしで何とか動かないものかと試作してみました。
ちなみにIE11側の互換設定はこれ↓の事です。
以降の説明を読むとわかりますが、HTTPヘッダの情報を書き換えるので、非推奨な方法です。
あくまでも技術的に実現できたという形で捉えてください。
本方法を採用し、発生した障害やトラブルに関して当ブログでは責任は負いません
試作
まずは、IEバージョン違い問題の応急処置でお約束となるドキュメントモードの変更を試作Apacheの応答ヘッダーにX-UA-Compatibleを仕込んでIE10以上のIEを強制的にIE10モードで表示させてみます。
・参考
META スイッチを Apache に実装する
<Location /> Header set X-UA-Compatible "IE=10" </Location>
Apacheを再起動して動作を確認してみると………動かない!
仕方ないので次はIE11の互換モードを有効にしてheaderをのぞいてみます。
IE11には開発者ツール(F12)という便利な機能が搭載されていますのでそれを利用します。
確認手順は以下
互換モード設定
まずは適当なサイトを互換モードの対象に指定し管理者ツールのネットワークキャプチャ有効化
F12を押して管理者ツールを起動。ネットワークタブを選択して、ネットワークのキャプチャを有効化
互換表示対象のサイトへアクセス
互換モードの対象のサイトへアクセスして、先頭のリクエストヘッダーを確認してみるとむむむ……互換モードではドキュメントモードだけでなくUser-Agentの中身もIE7になっているようです。
ご存知の方も多いと思いますがIE11では今までのIEとUser-Agentが大幅に変更されています。
IE11 の互換性の変更点 | Internet Explorer 11 開発者向けガイド
互換性 ("compatible") トークンとブラウザー ("MSIE") トークンが削除されました。 "like Gecko" トークンが追加されました (他のブラウザーとの一貫性のため)。 ブラウザーのバージョンが、新しいリビジョン ("rv") トークンによって報告されます。
本来、IE11のUser-Agentは↓のように表示されます。
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
上記のリクエストヘッダーではUser-Agentに"MSIE 7.0"の記述があるため、IE7のように振る舞っている事が分かります。
ちなみに、管理者ツールのエミュレーションで現在のエミュレートモードを確認すると
ドキュメントモードがIE7になっているのは分かりますが、User-Agentは別にIE7とは設定されていません。なんでやねん。
まさかと思いつつ、ドキュメントモードは変更せずにUser-Agentだけ変更し、IE11で動かなかったシステムへアクセスしてみると
………動いた!
システム内でIEのUser-Agentを見ているような箇所は存在しないため、FlashPlayer側でUser-Agentに"MSIE"が現れた場合はIEの処理を行うような分岐がされているようです。……推測ですが
いろいろと納得いかない部分はありますが、ひとまず解決の糸口がつかめました。
解決編
Apacheのhttpd.confに以下を追加LoadModule headers_module modules/mod_headers.so <IfModule headers_module> Header edit User-Agent "(Trident/[\d]+\.[\d]+;).*rv:([1-9][\d]\.[\d]+)" "$1 MSIE $2" </IfModule>
解決方法を簡潔に言ってしまうと
ApacheでIE11のUser-Agentを無理やり"MSIE"を含めた文字列に変換するという結構バッドノウハウ的な手法で解決しています。
例えばIE11から接続すると以下の様なリクエストヘッダのUser-Agentが
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Apacheを通して以下のように変換されます。
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MSIE 11.0) like Gecko
動いてしまうとなんだかなー、という内容でした。
……FlashPlayerが早くIE11に対応してくれると良いですね。
0 件のコメント:
コメントを投稿