IE8のユーザーエージェントがIE7になる原因と対処法
- 2012年11月09日
- JavaScript, jQuery, Webデザイン
- IE, JavaScript, jQuery, Webデザイン, ユーザーエージェント
仕事でユーザーエージェントを判別してIE7以下の人に特定のメッセージを見せるというものを実装することになり、jQueryの「jQuery Browser Plugin」を利用して見ました。
[js title=”sample.js”]$(function() {var agent = navigator.userAgent;
if($.os.name == "win"){
if($.browser.name == "msie" && $.browser.versionNumber < 8) {
$("#box_ie").show();
}
}
});[/js]
関係ないコードは省いたのですっきりしています^^;
これで当分動かしていたのですが、ある日IE8なのにメッセージ(ここでいう#box_ieの内容)が表示される現象に遭遇。
ユーザーエージェントを確認してみると「MSIE 7.0」と認識している・・・
なぜだ<(゜ロ゜;)>ノォオオオオオ!!
jQuery Browser Plugin が悪いのか?などと疑ったりすること数時間、いろいろ調べたところ原因が判明しました。
この現象の元凶は「互換表示モード」だったのです。
どうやらIE8で互換表示モードを使っていると、ユーザーエージェントでIE7と返すようなのです。
そこで、互換表示モードのIE8も、ちゃんとIE8と認識するように上のコードを修正。
IE8からユーザーエージェントに含まれるようになった「Trident」トークンの有無を追加しました。
[js language=”sample.js”]$(function() {var agent = navigator.userAgent;
if($.os.name == "win"){
if($.browser.name == "msie" && $.browser.versionNumber < 8 && agent.indexOf("Trident") ==-1) {
$("#box_ie").show();
}
}
});[/js]
ブラウザがIEで、バージョンが8より低く、ユーザーエージェントに「Trident」が含まれていないときにメッセージを表示させます。
互換表示モードのIE8で確認してみると、見事にメッセージが消えた♪
ユーザーのために作られた互換表示モードですが、制作者からするとありがた迷惑ですね^^;
どこかに書き留めておかないとまた同じところでハマりそうなので、記事にしてみました。
同じようにハマってる人の手助けになればいいなあ♪(*^-^)
コメントを残す