web-dev-qa-db-ja.com

JQueryは、IE 11の検出に失敗します

問題につまずいた。 Jqueryを使用してIE 11(現在放送中のベータ版))を検出しようとすると、結果は「firefox」になります。同じコードはIE 10。異なる指示を表示するには、ユーザーが使用しているブラウザを知る必要があります。

問題があれば、Oracle VirtualBoxでテストしています。 OSはWin 7です。

コードは次のとおりです。

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
var browser = function() { 
if ($.browser.msie) return "ie";
var ua = navigator.userAgent.toLowerCase();
if ($.browser.mozilla/* && /firefox/.test(ua)*/) return "firefox"; 
if (/chrome/.test(ua)) return "chrome";
return /*"#"*/'unknown';
} ();

alert (browser); // This return firefox
alert ($.browser.version); // This returns 11.0 - the CORRECT version of IE
</script>

ご覧のとおり、Jqueryはブラウザーのバージョンを検索できますが、ブラウザー名は検索できません。それをバイパスする方法はありますか?

26
Ehud Grand

最終的な解決策:

if (!!navigator.userAgent.match(/Trident\/7\./))
  return "ie";  

リリースバージョンが同じように動作することを期待することしかできません。

62
Ehud Grand

互換性のためです。クライアントコードは、多くの場合、機能の検出ではなくブラウザーの検出を実行します(これは悪い習慣です)。したがって、クライアントがIE 11の機能をすべて適切に使用するように努力して、MicrosoftはIE 11がMozilla互換であると報告するようにしました。

したがって、ブラウザの検出を行う代わりに、機能の検出を行います。 ブラウザ検出と機能検出 を参照してください。 Modernizr が最もよく知られている(およびMicrosoftはVisual StudioのASP.NETテンプレートの一部として出荷しています)、そのための優れたライブラリがいくつかあります。

MSDNブログIE 11ユーザーエージェント文字列 を参照してください。

7
mason

JQuery Migrateの目的は、古い不適切なコードの実行を許可することであり、新しい不適切なコードの作成を奨励​​することではありません。 IE11がリリースされるずっと前に、そのひどく記述された古いコードが作成されたので、とにかくIE11を知らず、おそらく誤動作するでしょう。 IE11を検出するためのjQuery Migrateプラグインは変更されません。新しいコードを作成している場合は、ブラウザ検出を使用しないでください。代わりに、機能検出を使用してください。

5
Dave Methvin

jQuery.browserは長い間非推奨であり、削除されました。$.supportまたはModernizrなどのより優れたツール

2
David Fregoli