web-dev-qa-db-ja.com

jQuery $ .browserは非推奨ですか?

JQueryの$ .browserが非推奨であると信じられているかどうかを誰かが教えてもらえますか?

既存の実装は引き続き機能しますか?そうでなければ、簡単に実装できる代替手段はありますか。

77
Mark_54

ドキュメント から:

$ .browserプロパティはjQuery 1.3で廃止され、その機能はjQueryの将来のリリースでチームがサポートするプラグインに移動される可能性があります。

そのため、はい、廃止されましたが、既存の実装は引き続き機能します。機能が削除された場合、プラグインを使用して簡単にアクセスできます。

代替手段があるかどうかについて...答えは「はい、おそらく」です。ブラウザ検出ではなく $.support を使用して機能検出を行う方がはるかに優れています。それを提供するブラウザではなく、必要な実際の機能を検出します。ブラウザごとに異なる最も重要な機能は、それによって検出されます。


2013年2月16日更新:jQuery 1.9では、この機能は削除されました( docs )。使用しないほうがはるかに良いです。本当に、本当にmustその機能を使用する必要がある場合は、 jQuery Migrate プラグインで復元できます。

68
lonesomeday

二番目の質問

既存の実装は引き続き機能しますか?そうでなければ、簡単に実装できる代替手段はありますか。

答えはyesですが、少し手間がかかるわけではありません。

$ .browserはjQueryの古いバージョンに含まれていた公式プラグインです。そのため、他のプラグインと同様に、簡単にコピーしてプロジェクトに組み込むか、jQueryリリースの最後に追加することができます。

使用したい場合に備えて、コードを抽出しました。


// Limit scope pollution from any deprecated API
(function() {

    var matched, browser;

// Use of jQuery.browser is frowned upon.
// More details: http://api.jquery.com/jQuery.browser
// jQuery.uaMatch maintained for back-compat
    jQuery.uaMatch = function( ua ) {
        ua = ua.toLowerCase();

        var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
            /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
            /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
            /(msie) ([\w.]+)/.exec( ua ) ||
            ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
            [];

        return {
            browser: match[ 1 ] || "",
            version: match[ 2 ] || "0"
        };
    };

    matched = jQuery.uaMatch( navigator.userAgent );
    browser = {};

    if ( matched.browser ) {
        browser[ matched.browser ] = true;
        browser.version = matched.version;
    }

// Chrome is Webkit, but Webkit is also Safari.
    if ( browser.chrome ) {
        browser.webkit = true;
    } else if ( browser.webkit ) {
        browser.safari = true;
    }

    jQuery.browser = browser;

    jQuery.sub = function() {
        function jQuerySub( selector, context ) {
            return new jQuerySub.fn.init( selector, context );
        }
        jQuery.extend( true, jQuerySub, this );
        jQuerySub.superclass = this;
        jQuerySub.fn = jQuerySub.prototype = this();
        jQuerySub.fn.constructor = jQuerySub;
        jQuerySub.sub = this.sub;
        jQuerySub.fn.init = function init( selector, context ) {
            if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
                context = jQuerySub( context );
            }

            return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
        };
        jQuerySub.fn.init.prototype = jQuerySub.fn;
        var rootjQuerySub = jQuerySub(document);
        return jQuerySub;
    };

})();

誰かが減価償却されたプラグインを必要とする理由を尋ねているなら、私は次の答えを用意しました。

何よりもまず答えは互換性です。 jQueryはプラグインベースであるため、一部の開発者は、$。browserを使用することを選択しました。

jQueryは 移行プラグイン をリリースしました。これは、プラグインが$ .browserなどの減価された依存関係を使用しているかどうかを開発者が検出するために作成されました。

これは開発者がプラグインにパッチを適用するのに役立ちましたが。 jQueryは$ .browserを完全に削除したため、開発者が上記のパッチを適用するか組み込むまで、上記の修正がおそらく唯一の解決策になります。

About:jQuery.browser

95
EminezArtus

ここでは、機能の可用性に基づいて、ブラウザーを検出する代替方法を示します。

IEのみを検出するには、これを使用できます。

if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
    //You are using IE>=4 (unreliable for IE11)
}
else
{
    //You are using other browser
}

最も人気のあるブラウザーを検出するには:

if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
    //You are using IE >= 4 (unreliable for IE11!!!)
}
else if(window.chrome)
{
    //You are using Chrome or Chromium
}
else if(window.opera)
{
    //You are using Opera >= 9.2
}
else if('MozBoxSizing' in document.body.style)
{
    //You are using Firefox or Firefox based >= 3.2
}
else if({}.toString.call(window.HTMLElement).indexOf('Constructor')+1)
{
    //You are using Safari >= 3.1
}
else
{
    //Unknown
}

IE11が条件付きコンパイル(/*@cc_on!@*/falseトリック)をサポートしなくなったため、この回答が更新されました。
このトピックに関する詳細については、 IE11がJavaScriptの条件付きコンパイルを削除しましたか? を確認できます。
彼らが提示した提案を使用しました。
別の方法として、typeof document.body.style.msTransform == "string"またはdocument.body.style.msTransform !== window.undefinedまたは'msTransform' in document.body.styleを使用することもできます。

6
Ismael Miguel

「$ .browserプロパティはjQuery 1.3で廃止され、その機能はjQueryの将来のリリースでチームがサポートするプラグインに移動される可能性があります。」

から http://api.jquery.com/jQuery.browser/

3
Gabriel Santos

更新しました! 2015年3月24日(1時間未満にスクロール)

lonesomedayanswer は絶対に正しいです。私はこの情報を追加すると思いました。私はしばらく前にVanilla JSでブラウザを取得するためのメソッドを作成していましたが、最終的にjQueryの以降のバージョンのjQuery.browserを置き換えるためにそれを曲げました。新しいjQueryライブラリのどの部分にも干渉しませんが、従来のjQuery.browserオブジェクトと同じ機能、およびその他の小さな機能を提供します。


新しい拡張バージョン!

新しいブラウザの場合はさらに徹底しています。また、モバイルテストで90%以上の精度!すべてのモバイルブラウザーでテストしたわけではないので、100%とは言いませんが、新しい機能は$.browser.mobile boolean/stringを追加します。モバイルでない場合はfalseです。それ以外の場合は、モバイルデバイスまたはブラウザーの文字列名になります(Android、RIMタブレット、iPodなどのベストゲス)。

可能な警告の1つは、userAgent文字列に完全に依存しているため、一部の古い(サポートされていない)ブラウザーでは動作しない場合があります。

JSミニファイド

/* quick & easy cut & paste */
;;(function($){if(!$.browser&&1.9<=parseFloat($.fn.jquery)){var a={browser:void 0,version:void 0,mobile:!1};navigator&&navigator.userAgent&&(a.ua=navigator.userAgent,a.webkit=/WebKit/i.test(a.ua),a.browserArray="MSIE Chrome Opera Kindle Silk BlackBerry PlayBook Android Safari Mozilla Nokia".split(" "),/Sony[^ ]*/i.test(a.ua)?a.mobile="Sony":/RIM Tablet/i.test(a.ua)?a.mobile="RIM Tablet":/BlackBerry/i.test(a.ua)?a.mobile="BlackBerry":/iPhone/i.test(a.ua)?a.mobile="iPhone":/iPad/i.test(a.ua)?a.mobile="iPad":/iPod/i.test(a.ua)?a.mobile="iPod":/Opera Mini/i.test(a.ua)?a.mobile="Opera Mini":/IEMobile/i.test(a.ua)?a.mobile="IEMobile":/BB[0-9]{1,}; Touch/i.test(a.ua)?a.mobile="BlackBerry":/Nokia/i.test(a.ua)?a.mobile="Nokia":/Android/i.test(a.ua)&&(a.mobile="Android"),/MSIE|Trident/i.test(a.ua)?(a.browser="MSIE",a.version=/MSIE/i.test(navigator.userAgent)&&0<parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,""))?parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,"")):"Edge",/Trident/i.test(a.ua)&&/rv:([0-9]{1,}[\.0-9]{0,})/.test(a.ua)&&(a.version=parseFloat(a.ua.match(/rv:([0-9]{1,}[\.0-9]{0,})/)[1].replace(/[^0-9\.]/g,"")))):/Chrome/.test(a.ua)?(a.browser="Chrome",a.version=parseFloat(a.ua.split("Chrome/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Opera/.test(a.ua)?(a.browser="Opera",a.version=parseFloat(a.ua.split("Version/")[1].replace(/[^0-9\.]/g,""))):/Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(a.ua)?(a.mobile="Kindle",/Silk/i.test(a.ua)?(a.browser="Silk",a.version=parseFloat(a.ua.split("Silk/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Kindle/i.test(a.ua)&&/Version/i.test(a.ua)&&(a.browser="Kindle",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,"")))):/BlackBerry/.test(a.ua)?(a.browser="BlackBerry",a.version=parseFloat(a.ua.split("/")[1].replace(/[^0-9\.]/g,""))):/PlayBook/.test(a.ua)?(a.browser="PlayBook",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/BB[0-9]{1,}; Touch/.test(a.ua)?(a.browser="Blackberry",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Android/.test(a.ua)?(a.browser="Android",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Safari/.test(a.ua)?(a.browser="Safari",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Firefox/.test(a.ua)?(a.browser="Mozilla",a.version=parseFloat(a.ua.split("Firefox/")[1].replace(/[^0-9\.]/g,""))):/Nokia/.test(a.ua)&&(a.browser="Nokia",a.version=parseFloat(a.ua.split("Browser")[1].replace(/[^0-9\.]/g,""))));if(a.browser)for(var b in a.browserArray)a[a.browserArray[b].toLowerCase()]=a.browser==a.browserArray[b];$.extend(!0,$.browser={},a)}})(jQuery);
/* quick & easy cut & paste */

jsFiddle "jQueryプラグイン:Get Browser(Extended Alt Edition)"

/**     jQuery.browser
 *      @author J.D. McKinstry (2014)
 *      @description    Made to replicate older jQuery.browser command in jQuery versions 1.9+
 *      @see http://jsfiddle.net/SpYk3/wsqfbe4s/
 *
 *      @extends        jQuery
 *      @namespace      jQuery.browser
 *      @example        jQuery.browser.browser == 'browserNameInLowerCase'
 *      @example        jQuery.browser.version
 *      @example        jQuery.browser.mobile   @returns        BOOLEAN
 *      @example        jQuery.browser['browserNameInLowerCase']
 *      @example        jQuery.browser.chrome   @returns        BOOLEAN
 *      @example        jQuery.browser.safari   @returns        BOOLEAN
 *      @example        jQuery.browser.opera    @returns        BOOLEAN
 *      @example        jQuery.browser.msie     @returns        BOOLEAN
 *      @example        jQuery.browser.mozilla  @returns        BOOLEAN
 *      @example        jQuery.browser.webkit   @returns        BOOLEAN
 *      @example        jQuery.browser.ua       @returns        navigator.userAgent String
 */
;;(function($){if(!$.browser&&1.9<=parseFloat($.fn.jquery)){var a={browser:void 0,version:void 0,mobile:!1};navigator&&navigator.userAgent&&(a.ua=navigator.userAgent,a.webkit=/WebKit/i.test(a.ua),a.browserArray="MSIE Chrome Opera Kindle Silk BlackBerry PlayBook Android Safari Mozilla Nokia".split(" "),/Sony[^ ]*/i.test(a.ua)?a.mobile="Sony":/RIM Tablet/i.test(a.ua)?a.mobile="RIM Tablet":/BlackBerry/i.test(a.ua)?a.mobile="BlackBerry":/iPhone/i.test(a.ua)?a.mobile="iPhone":/iPad/i.test(a.ua)?a.mobile="iPad":/iPod/i.test(a.ua)?a.mobile="iPod":/Opera Mini/i.test(a.ua)?a.mobile="Opera Mini":/IEMobile/i.test(a.ua)?a.mobile="IEMobile":/BB[0-9]{1,}; Touch/i.test(a.ua)?a.mobile="BlackBerry":/Nokia/i.test(a.ua)?a.mobile="Nokia":/Android/i.test(a.ua)&&(a.mobile="Android"),/MSIE|Trident/i.test(a.ua)?(a.browser="MSIE",a.version=/MSIE/i.test(navigator.userAgent)&&0<parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,""))?parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,"")):"Edge",/Trident/i.test(a.ua)&&/rv:([0-9]{1,}[\.0-9]{0,})/.test(a.ua)&&(a.version=parseFloat(a.ua.match(/rv:([0-9]{1,}[\.0-9]{0,})/)[1].replace(/[^0-9\.]/g,"")))):/Chrome/.test(a.ua)?(a.browser="Chrome",a.version=parseFloat(a.ua.split("Chrome/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Opera/.test(a.ua)?(a.browser="Opera",a.version=parseFloat(a.ua.split("Version/")[1].replace(/[^0-9\.]/g,""))):/Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(a.ua)?(a.mobile="Kindle",/Silk/i.test(a.ua)?(a.browser="Silk",a.version=parseFloat(a.ua.split("Silk/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Kindle/i.test(a.ua)&&/Version/i.test(a.ua)&&(a.browser="Kindle",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,"")))):/BlackBerry/.test(a.ua)?(a.browser="BlackBerry",a.version=parseFloat(a.ua.split("/")[1].replace(/[^0-9\.]/g,""))):/PlayBook/.test(a.ua)?(a.browser="PlayBook",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/BB[0-9]{1,}; Touch/.test(a.ua)?(a.browser="Blackberry",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Android/.test(a.ua)?(a.browser="Android",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Safari/.test(a.ua)?(a.browser="Safari",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Firefox/.test(a.ua)?(a.browser="Mozilla",a.version=parseFloat(a.ua.split("Firefox/")[1].replace(/[^0-9\.]/g,""))):/Nokia/.test(a.ua)&&(a.browser="Nokia",a.version=parseFloat(a.ua.split("Browser")[1].replace(/[^0-9\.]/g,""))));if(a.browser)for(var b in a.browserArray)a[a.browserArray[b].toLowerCase()]=a.browser==a.browserArray[b];$.extend(!0,$.browser={},a)}})(jQuery);
/* - - - - - - - - - - - - - - - - - - - */

var b = $.browser;
console.log($.browser);    //    see console, working example of jQuery Plugin
console.log($.browser.chrome);

for (var x in b) {
    if (x != 'init')
        $('<tr />').append(
            $('<th />', { text: x }),
            $('<td />', { text: b[x] })
        ).appendTo($('table'));
}
table { border-collapse: collapse; }
th, td { border: 1px solid; padding: .25em .5em; vertical-align: top; }
th { text-align: right; }

textarea { height: 500px; width: 100%; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table></table>
3
SpYk3HH

http://api.jquery.com/jQuery.browser/ の公式ドキュメントから:

このプロパティはjQuery 1.9で削除され、jQuery.migrateプラグインを介してのみ使用できます。

たとえば、jquery-migrate-1.4.1.jsを使用して、既存のコードまたは$ .browserを使用するプラグインを引き続き機能させながら、将来コードから$ .browserを完全に削除する方法を見つけることができます。

0
Jaime Montoya