Frage Ist jQuery $ .browser veraltet?


Kann mir jemand sagen, ob ich Recht habe, wenn ich glaube, dass jQuerys $ .browser veraltet ist?

Werden meine bestehenden Implementierungen weiter funktionieren? Wenn nicht, gibt es eine einfach zu implementierende Alternative.


76
2018-03-09 17:15


Ursprung


Antworten:


Von die Dokumentation:

Die $ .browser-Eigenschaft ist in jQuery 1.3 veraltet und ihre Funktionalität wird möglicherweise in einer zukünftigen Version von jQuery in ein Team-unterstütztes Plugin verschoben.

Also, ja, es ist veraltet, aber Ihre bestehenden Implementierungen werden weiter funktionieren. Wenn die Funktionalität entfernt wird, ist es wahrscheinlich leicht zugänglich mit einem Plugin.

Ob es eine Alternative gibt ... Die Antwort lautet "ja, wahrscheinlich". Es ist weit, viel besser, Feature-Erkennung mit zu tun $.support statt Browser-Erkennung: Erkennen Sie die tatsächliche Funktion, die Sie benötigen, nicht den Browser, der sie bereitstellt. Die wichtigsten Funktionen, die von Browser zu Browser variieren, werden damit erkannt.


Update 16. Februar 2013: In jQuery 1.9 wurde diese Funktion entfernt (Dokumente). Es ist viel besser, es nicht zu benutzen. Wenn du wirklich, wirklich Muss Nutzen Sie seine Funktionalität, können Sie es mit dem wiederherstellen jQuery Migrieren Plugin.


67
2018-03-09 17:18



Zweite Frage

Werden meine bestehenden Implementierungen weiter funktionieren? Wenn nicht, gibt es ein   einfach zu implementierende Alternative.

Die Antwort ist Ja, aber nicht ohne ein wenig Arbeit.

$ .browser ist ein offizielles Plugin, das in älteren Versionen von jQuery enthalten war. Sie können es also wie jedes Plugin einfach kopieren und in Ihr Projekt integrieren oder einfach am Ende eines beliebigen jQuery-Releases hinzufügen.

Ich habe den Code für Sie extrahiert, falls Sie ihn verwenden möchten.


// 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;
    };

})();

Wenn Sie sich fragen, warum jemand ein abgeschriebenes Plugin benötigt, habe ich die folgende Antwort vorbereitet.

In erster Linie ist die Antwort Kompatibilität. Da jQuery pluginbasiert ist, entschieden sich einige Entwickler dafür, $ .browser zu verwenden und mit den neuesten Versionen von jQuery, die $ .browser nicht enthalten, wurden all diese Plugins unbrauchbar gemacht.

jQuery hat a veröffentlicht Migrations-Plugin, die für Entwickler erstellt wurde, um festzustellen, ob ihr Plugin irgendwelche abgeschriebenen Abhängigkeiten wie $ .browser verwendet hat.

Obwohl dies den Entwicklern geholfen hat, ihre Plugins zu patchen. jQuery hat $ .browser vollständig gelöscht, so dass das obige Update wahrscheinlich die einzige Lösung ist, bis Ihre Entwickler das oben genannte patchen oder integrieren.

Über:  jQuery.browser


92
2018-01-21 01:10



Hier stelle ich eine alternative Möglichkeit vor, einen Browser basierend auf der Verfügbarkeit von Funktionen zu erkennen.

Um nur IE zu erkennen, können Sie Folgendes verwenden:

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

Um die beliebtesten Browser zu erkennen:

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
}

Diese Antwort wurde aktualisiert, da IE11 die bedingte Kompilierung nicht mehr unterstützt (die /*@cc_on!@*/false Trick).
Du kannst nachschauen Hat IE11 die konditionale Kompilierung von Javascript entfernt? für mehr Informationen zu diesem Thema.
Ich habe den Vorschlag, den sie dort präsentiert haben, benutzt.
Alternativ können Sie verwenden typeof document.body.style.msTransform == "string" oder document.body.style.msTransform !== window.undefined oder auch 'msTransform' in document.body.style.


6
2017-09-12 16:29



Aktualisiert! 3/24/2015 (scrolle unter hr)

Einsamer Tagist es Antworten ist absolut richtig, ich dachte nur, ich würde diesen Leckerbissen hinzufügen. Ich hatte eine Methode vor einiger Zeit gemacht, um einen Browser in Vanilla JS zu bekommen und ihn schließlich zu ersetzen jQuery.browser in späteren Versionen von jQuery. Es interferiert nicht mit irgendeinem Teil der neuen jQuery-Bibliothek, sondern bietet die gleiche Funktionalität wie das traditionelle jQuery.browser Objekt, sowie einige andere kleine Funktionen.


Neue erweiterte Version!

Ist für neuere Browser viel gründlicher. Außerdem, 90% Genauigkeit bei mobilen Tests! Ich werde nicht 100% sagen, da ich nicht auf jedem mobilen Browser getestet habe, sondern neue Funktionen hinzufügt $.browser.mobile Boolescher / String. Es ist falsch, wenn nicht mobil, sonst wird es ein String-Name für das mobile Gerät oder den Browser sein (Beste Ratschläge wie: Android, RIM Tablet, iPod, etc ...).

Ein möglicher Vorbehalt, funktioniert möglicherweise nicht mit einigen älteren (nicht unterstützten) Browsern, da es vollständig darauf angewiesen ist userAgent Zeichenfolge.

JS minimiert

/* 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 Plugin: Get Browser (Erweiterte 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
2017-10-08 13:25



"Die Eigenschaft $ .browser ist in jQuery 1.3 veraltet und ihre Funktionalität kann in einer zukünftigen Version von jQuery in ein Team-unterstütztes Plugin verschoben werden."

Von http://api.jquery.com/jQuery.browser/


3
2018-03-09 17:16



Aus der offiziellen Dokumentation bei http://api.jquery.com/jQuery.browser/:

Diese Eigenschaft wurde in jQuery 1.9 entfernt und ist nur über das jQuery.migrate-Plugin verfügbar.

Sie können zum Beispiel verwenden jquery-migrate-1.4.1.js um Ihren bestehenden Code oder Plugins, die $ .browser benutzen, weiterhin zu verwenden, während Sie einen Weg finden, $ .browser in Zukunft von Ihrem Code loszuwerden.


0
2017-10-27 00:00