27

ちょうど問題に遭遇しました。Jquery を使用して IE 11 (現在公開中のベータ版) を検出しようとすると、結果は「firefox」になります。同じコードで IE 10 が検出されます。さまざまな指示を表示するには、ユーザーが使用しているブラウザーを知る必要があります。

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

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

<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 はブラウザーのバージョンを検出できますが、ブラウザー名は検出できません。それをバイパスする方法はありますか?

4

4 に答える 4

63

最終的な解決策:

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

リリース バージョンが同じように動作することを願うだけです。

于 2013-09-08T14:04:47.777 に答える
7

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

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

IE 11 User Agent Strings に関する MSDN ブログを参照してください。

于 2014-08-13T18:24:46.710 に答える
5

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

于 2013-09-29T14:47:05.547 に答える
2

jQuery.browser長い間非推奨であり、削除されています。使用する$.supportか、次のようなより良いツールModernizr

于 2013-09-08T22:36:44.927 に答える