25

jQuery 1.3 が非推奨になった (将来のバージョンでは削除されると思います) などの状況で、ブラウザーの検出をどのように行うべき$.browser.msieでしょうか?

私はこれを、次のようなほぼすべてのブラウザーの CSS 修正のためにどのブラウザーを使用しているかを判断するためによく使用しました。

$.browser.opera
$.browser.safari
$.browser.mozilla

...まあ、それですべてだと思います:)

私が使用している場所では1 px、ブラウザーの違いを修正しようとしているだけなので、どのブラウザーの問題が問題を引き起こしているのかわかりません。

編集:新しい jQuery 機能では、IE6 と IE7 のどちらを使用しているかを判断する方法がありません。これを今どのように判断すべきですか?

4

16 に答える 16

33

はい、ブラウザーの検出は廃止されましたが、廃止されたプロパティはおそらく jQuery からすぐに削除されることはありません。それらが削除されたときに、ブラウザーの検出を行う必要がある場合は、小さくてシンプルなプラグインを使用して同じ機能を簡単に追加できます。

だから、私の答えは、今のところ、それについて何もしないことです:)

編集:将来使用するプラグインも提供します(テストされておらず、jqueryソースからコピーアンドペーストされています):

(function($) {
    var userAgent = navigator.userAgent.toLowerCase();

    $.browser = {
        version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
        safari: /webkit/.test( userAgent ),
        opera: /opera/.test( userAgent ),
        msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
        mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
    };

})(jQuery);
于 2009-02-24T09:24:17.517 に答える
9

$.support.png (p.ej.) がないので、まだ $.browser.version を使用する必要があります。おそらく、さらに多くの $.support.XXXX プロパティを要求し続けることができます。必要に応じて。

于 2009-01-19T07:52:43.003 に答える
8

.browser は廃止され、.support が採用されました。詳細はこちら: jquery.support これが本質的に意味することは、ブラウザ スニッフィングを使用する代わりに、jquery が機能サポート検出を行い、ブラウザが実行できることをより細かく制御できるようになったことです。

説明から:

jQuery 1.3 で追加されました さまざまなブラウザー機能またはバグの存在を表すプロパティのコレクション。

jQuery には多数のプロパティが含まれているため、独自のプロパティを自由に追加してください。これらのプロパティの多くはかなり低レベルであるため、一般的な日常の開発に役立つかどうかは疑わしいですが、主にプラグインおよびコア開発者によって使用されます.

すべてのサポート プロパティの値は、機能検出を使用して決定されます (ブラウザ スニッフィングは一切使用しません)。

于 2009-01-18T09:32:59.860 に答える
5

ブラウザの検出jQueryで非推奨ではありません。jQuery.browserのドキュメントページ。次のように記載されています。

このプロパティは使用しないことをお勧めします。代わりに機能検出を使用してみてください(jQuery.supportを参照)。

非推奨とは、「将来の削除が予定されている」ことを意味します。ユーザーエージェントではなく機能のスニッフィングに関するこのアドバイスは、jQueryに固有のものではなく、単なる一般的なアドバイスです。彼らが言っているのは、正しいことを簡単に行えるようにしているということだけです。

ただし、ユーザーエージェントのスニッフィングは常に必要になります。開発者の軍隊によって毎日更新されない限りjQuery.support、すべてのブラウザのすべてのマイナーポイントバージョンのすべてのバグとすべての機能に追いつくことができる方法はありません。

これについての混乱は、内部的には、jQueryがブラウザのスニッフィングを行わなくなったという事実から生じたと思います。ただし、ユーティリティAPIjQuery.browserは引き続き存在します。

于 2009-11-19T07:07:45.970 に答える
5

機能のサポートは良い考えに思えますが、考えられるすべての「バグ」をサポートしている場合にのみ、意図したとおりに機能します。最初のコメンターのように、$support.png も $support.stepping も $support.peekaboo もありません。リストは続きます。これに関する問題は、あるブラウザーを準拠させるためのコードが、それを必要としないブラウザーによって実行されることは避けられないことです。

于 2009-02-04T17:19:18.110 に答える
4
function browserLessThanIE7(){
   return (/MSIE ((5\\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");
}

正常に動作する可能性もあります...これは、バージョン 5、5.5、および 6 をチェックします。

@Nate: (5\.5)|6 を 7 に変更し、バージョン 7 をチェックします。

于 2009-10-09T14:19:28.893 に答える
2

jQuery1.2のコードベースからリバースエンジニアリングすると言います。

コードの次のセクションを参照してください。

jQuery.browser = {
    version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
    safari: /webkit/.test( userAgent ),
   opera: /opera/.test( userAgent ),
  msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
  mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

GPLおよびMITライセンスを尊重し、コードから学びます。コピーして貼り付けないでください。

または特にIE6の匂いを嗅ぐために。あなたができること:

function IsThisBrowserIE6() {
    return ((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined))
}
于 2009-03-12T21:22:12.823 に答える
2

jquery.browser を書き直して jquery.support を内部的に使用し、機能に基づいてブラウザーを決定できなかったのはなぜですか (おそらく、必要に応じて jquery.browser の現在のメソッドで補足されます)、ブラウザーのファミリとバージョンを選択するための便利な手段を提供します。 、おそらく今日のjquery.browserよりも信頼性が高いですか?

于 2010-04-21T00:09:16.120 に答える
2

機能の検出はすべてうまく機能しているように聞こえますが、特定のブラウザーで機能しないコードを書いている場合、最も簡単な方法はブラウザーの検出です。

自動マージンを使用した要素の水平方向の中央揃えは、IE を除くすべてのブラウザーで機能します。どの機能をテストしますか? 何も思いつきません。しかし、私はそれが動作しないブラウザを知っています.

特定の状況で機能検出が役立つ理由がわかります。ブラウザが quirks/strict モードの場合。最良の妥協点は、両方の方法を利用することです。

これに照らして、「このプロパティを使用しないことをお勧めします。代わりに機能検出を使用してください」は、jQuery.browser ドキュメント ページから削除する必要があります。それは誤解を招くものです。

于 2010-03-04T02:01:24.523 に答える
1

navigator.userAgent簡単に変更でき、ページを表示している実際のブラウザを表していない可能性があるという意味で、これはあまり信頼できないことを指摘したいと思います。$.browserこれは、そもそも廃止された理由の1つである可能性があります。

しかし、質問のために、ブラウザの検出が絶対に必要であると仮定しましょう。

James Padolseyによるこの非常にクールなスニペットに出くわしました。これは、条件付きコメントを使用してInternetExplorerを実際に区別します。

上記のスニペットとyepnope.jsのコードを使用して小さなコードをコンパイルしました:

(function(window, doc) {
    window.detector = window.detector || (function() {
        var undef,
            docElement = doc.documentElement,       
            v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i'),
            isGecko = ( 'MozAppearance' in docElement.style ),
            isGeckoLTE18 = isGecko && !! doc.createRange().compareNode,
            isOpera = !! ( window.opera && toString.call( window.opera ) == '[object Opera]' ),
            isWebkit = ( 'webkitAppearance' in docElement.style ),
            isNewerWebkit = isWebkit && 'async' in doc.createElement('script');

            while (
                div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
                all[0]
            );

            return {
                isGecko: isGecko,
                isGeckoLTE18: isGeckoLTE18,
                isGeckoGT18: isGecko && ! isGeckoLTE18,
                isOpera: isOpera,
                isWebkit: isWebkit,
                isNewerWebkit: isWebkit && 'async' in doc.createElement('script'),
                isIE: ( v > 4 ),
                ieVersion: ( v > 4 ? v : undef )
            };
    }());
}(window, document));

これは、ブラウザの機能によってブラウザを区別します。

唯一の問題は、現在、SafariとChrome(両方のWebkitブラウザー)、およびGecko、Webkit、Operaブラウザー自体のバージョンを区別する方法がないことです。

完璧ではないことはわかっていますが、。よりもわずかに改善されていnavigator.userAgentます。

于 2011-08-17T03:10:54.063 に答える
1

Mozilla と Webkit ブラウザー、および IE8 で問題なく動作する Javascript を入手しました。ただし、6と7では壊れます。これは、CSS やお粗末な Javascript とは関係ありませんが、IE<8 のサポートは貧弱です。

ブラウザのスニッフィングではなく「機能」のチェックについて人々がどこから来ているかはわかりますが、スニッフィングが利用可能な機能は破壊的なコードとは関係ありません。したがって、ブラウザのスニッフィングと機能のスニッフィングの違いは何ですか$.support オブジェクトですべての機能を利用できますか?

于 2009-05-14T07:25:47.347 に答える
1

http://code.labor8.eu/geckoFixでGeckoFix スクリプトを試してください。これは 3.0 より前の Firefox を検出するので、必要に応じてカスタマイズできます (つまり、Firefox 2、Firefox 3、Opera、およびサファリ)。それはあなたが探しているものかもしれないと思います。ユーザー エージェントを確認するには、アドレス バーに javascript:alert(navigator.userAgent) と入力し、スクリプトに入力する必要がある特定の文字を見つけます。

于 2009-02-24T09:14:32.407 に答える
1

jQuery 1.3 はブラウザ テストに取って代わりました。

率直に言って、Web 開発者が自分のサイトがどのブラウザーで実行されているかを心配する頻度が高いことに驚いています。10 年以上の Web 開発の中で、何か違うことをするのはもちろんのこと、気にかけてきたいくつかのケースを思いつくことができます。最も一般的な理由は、名前付きのフォント サイズが Firefox と IE で大きく異なる ( font-size: largeIE では FF よりもはるかに大きい) ため、IEfix.css ファイルを使用してそれを修正しました。

おそらく、What is better: CSS ハックまたはブラウザー検出?を参照する必要があります。このトピックに関するより徹底的な議論のために。

要するに、どのブラウザかではなく、機能がサポートされているかどうかを気にする必要があります。

それが IE であるかどうかを気にする理由を知らずにこれ以上何かを言うのは難しいです。おそらく、あなたがしていることを行うためのより良い解決策があることに気付くからです。

于 2009-01-18T09:32:48.487 に答える
1

これは IE 6 にとって最もクリーンな方法ではないかもしれませんが、確かに機能し、理解しやすいものです。

$(document).ready(function() {
    ie6catch = $.browser.msie + $.browser.version;
    if (ie6catch.indexOf("true6") == -1) {
        alert("This is not Internet Explorer 6");
    }
});
于 2010-02-23T04:15:14.200 に答える
0

cssのbodyタグにクラスとしてブラウザを追加することをお勧めします。私はWindowsを実行しておらず、powerPCを使用しているため、これが機能するかどうかはわかりませんが、すべてのInternet Explorer 6〜9に.ie6のクラスを配置する必要があり、あまり役に立ちません。他のすべてにはmooModernizrを使用してください。

if (Browser.Engine.trident) {

    var IEbrowser = $('body');

    IEbrowser.addClass('ie');

}​
于 2010-03-30T05:42:18.877 に答える