61

jquery または javascript を使用して、chrome および safari ブラウザーを検出しようとしています。jQuery.browser を使うべきではないと思いました。ここに何か提案はありますか?どうもありがとう!

4

10 に答える 10

83

を使用したくない場合は、ケース 1$.browserを参照してください。それ以外の場合は、使用が推奨されていないため、ケース 23を使用して情報を得ることができます (ユーザー エージェントは、これを使用してスプーフィングされる可能性があります)。別の方法として、エージェント情報ではなく機能サポートを検出するものを使用できます。$.browserjQuery.support

しかし...

ブラウザの種類(Chrome または Safari のみ)を取得したいが を使用しない場合は$.browserケース 1が探しているものです...


これはあなたの要件に適合します:

ケース 1: (jQuery も $.browser も使用せず、javascript のみ)

ライブデモ: http://jsfiddle.net/oscarj24/DJ349/

var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);

if (isChrome) alert("You are using Chrome!");
if (isSafari) alert("You are using Safari!");

これらのケースは以前に使用してうまく機能しましたが、お勧めしません...

ケース 2: (jQuery と $.browser を使用、これはトリッキーです)

ライブデモ: http://jsfiddle.net/oscarj24/gNENk/

$(document).ready(function(){

    /* Get browser */
    $.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());

    /* Detect Chrome */
    if($.browser.chrome){
        /* Do something for Chrome at this point */
        /* Finally, if it is Chrome then jQuery thinks it's 
           Safari so we have to tell it isn't */
        $.browser.safari = false;
    }

    /* Detect Safari */
    if($.browser.safari){
        /* Do something for Safari */
    }

});

ケース 3: (jQuery と $.browser を使用した「エレガントな」ソリューション)

ライブデモ: http://jsfiddle.net/oscarj24/uJuEU/

$.browser.chrome = $.browser.webkit && !!window.chrome;
$.browser.safari = $.browser.webkit && !window.chrome;

if ($.browser.chrome) alert("You are using Chrome!");
if ($.browser.safari) alert("You are using Safari!");
于 2012-09-27T16:28:12.620 に答える
73

ここでの回答のほとんどは時代遅れであり、これ以上ありません。jQuery.browserなぜ誰かがjQueryを使用したり、User Agent私を超えて嗅いだりするのでしょうか。

ブラウザーを検出する代わりに、
(サポートされているかどうかに関係なく)機能を検出する必要があります。

以下はfalseMozilla FirefoxMicrosoft Edgeです。Google Chrometrueにあります。

"webkitLineBreak" in document.documentElement.style

これは将来性がないことに注意してください。ブラウザは-webkit-line-break将来いつでもプロパティを実装できるため、誤検出が発生する可能性があります。次に、Chrome でドキュメント オブジェクトを見て、webkit接頭辞が付いているものを選択し、それが他のブラウザにないことを確認します。

于 2013-05-09T10:27:29.857 に答える
11

ブラウザを検出する代わりに、機能を検出する必要があります(サポートされているかどうかは関係ありません)。これはModernizrが行うことです。

もちろん、問題を回避する必要があり、機能を検出しないために、ブラウザをチェックする必要がある場合もあります。WebKitjQueryを使用しない特定のチェック$.browser

var isWebKit = !!window.webkitURL;

コメントのいくつかが示唆しているように、上記のアプローチは古いSafariバージョンでは機能しません。コメントや別の回答で提案されている別のアプローチで更新する:

var isWebKit = 'WebkitAppearance' in document.documentElement.style;
于 2012-09-27T16:25:46.590 に答える
8

2019年にはまだ癖と矛盾があります。

たとえば、ブラウザー間でスケーリングされた svg およびポインター イベントを使用します。

このトピックの答えはどれももう機能していません。(おそらくjqueryを使っている人)

ネイティブCSS サポート APIを介して、css ルールがサポートされているかどうかを javascript でテストすることによる代替方法を次に示します。適応するために進化するかもしれません!

最も正確な検出のために、セミコロンで区切られた多くの CSS ルールを渡すことが可能であることに注意してください。

if (CSS.supports("( -webkit-box-reflect:unset )")){
  console.log("WEBKIT BROWSER")
  // More math...
 } else {
  console.log("ENJOY")
 }

if (CSS.supports("( -moz-user-select:unset )")){
  console.log("FIREFOX!!!")
 }

ループで使用しないように注意してください。パフォーマンスのために、ロード時に定数を設定することをお勧めします。

const ff = CSS.supports("( -moz-user-select:unset )")
if (ff){ //... } 

CSS のみを使用すると、上記は次のようになります。

@supports (-webkit-box-reflect:unset) {
  div {
    background: red
  }
}

@supports (-moz-user-select:unset) {
  div {
    background: green
  }
}
<div>
  Hello world!!
</div>

可能な -webkit- のみの CSS ルールのリスト。

可能な -moz- のみのルールのリスト。

css サポートを使用できますか?

于 2019-02-13T09:46:06.647 に答える
2

jquery または javascript を使用して、chrome および safari ブラウザーを検出しようとしています。

使用するjQuery.browser

jQuery.browser を使うべきではないと思いました。

これは、ブラウザーを検出するのはよくない考えだからです。本当にそうするつもりなら、(jQuery が関係している場合) ブラウザーを検出する最良の方法です。

于 2012-09-27T16:28:12.297 に答える
0

jQueryはそれを提供します:

if ($.browser.webkit){
    ...
}

詳細については、http://api.jquery.com/jQuery.browser/をご覧ください。

アップデート

他の回答/コメントに記載されているように、エージェント情報よりも機能のサポートを確認することをお勧めします。jQueryは、そのためのオブジェクトも提供しますjQuery.supportドキュメントをチェックして、チェックする詳細なリスト機能を確認してください。

于 2012-09-27T16:25:04.517 に答える