Pytanie Czy jQuery $ .browser jest przestarzały?


Czy ktoś może mi powiedzieć, czy mam rację, sądząc, że $ .browser jQuery jest / przestał być przestarzały?

Czy moje istniejące wdrożenia będą nadal działać? Jeśli nie, czy istnieje łatwa do wdrożenia alternatywa.


76
2018-03-09 17:15


pochodzenie


api.jquery.com/jQuery.browser Kategoria: przestarzałe. - Evan Mulawski
Dlaczego zostało to zaznaczone? Dla niektórych może to być trywialne pytanie, ale jeśli nie znam innej alternatywy, to jest to ważne pytanie. - Mark_54
Lub po prostu dodaj wtyczkę: github.com/gabceb/jquery-browser-plugin - user956584


Odpowiedzi:


Od dokumentacja:

Właściwość $ .browser jest przestarzała w jQuery 1.3, a jej funkcjonalność może zostać przeniesiona do wtyczki obsługiwanej przez zespół w przyszłej wersji jQuery.

Tak, jest to przestarzałe, ale istniejące implementacje będą nadal działać. Jeśli funkcja zostanie usunięta, najprawdopodobniej będzie łatwo dostępna za pomocą wtyczki.

Co do tego, czy istnieje alternatywa ... Odpowiedź brzmi "tak, prawdopodobnie". O wiele lepiej jest używać funkcji wykrywania obiektów $.support raczej niż wykrywanie przeglądarki: wykryj rzeczywistą funkcję, której potrzebujesz, a nie przeglądarkę, która ją zapewnia. Najważniejsze funkcje, które różnią się od przeglądarki do przeglądarki, są wykrywane z tym.


Aktualizacja 16 lutego 2013 r .: W jQuery 1.9 ta funkcja została usunięta (docs). O wiele lepiej nie używać tego. Jeśli naprawdę, naprawdę musi użyj jego funkcjonalności, możesz go przywrócić za pomocą jQuery Migracja podłącz.


67
2018-03-09 17:18



Problem z $.support to, jak wykryć, czy używam IE 7, i dlatego muszę dodać poprawki CSS, aby naprawić moją stronę? - Rocket Hazmat
@Rakieta Komentarze warunkowe na pewno byłoby lepiej. - lonesomeday
lonesomeday - Dziękuję za ten dodatkowy komentarz. Wszyscy staramy się budować naszą wiedzę i czasami potrzebujemy pomocy. - Mark_54
i $.browser został usunięty z jQuery 1.9 - diEcho
Jest tak wiele dziwactw z IE i różnymi wersjami IE. Tak, IE 7 obsługuje animacje, ale NIE, nie chcę, żeby moi użytkownicy to zobaczyli! To jest straszne. Więc $ .browser jest po prostu bardzo przydatny w tym przypadku. - Elger Mensonides


Drugie Pytanie

Czy moje istniejące wdrożenia będą nadal działać? Jeśli nie, czy istnieje   łatwa do wdrożenia alternatywa.

Odpowiedź to tak, ale nie bez odrobiny pracy.

$ .browser jest oficjalną wtyczką, która była zawarta w starszych wersjach jQuery, więc jak każda wtyczka możesz ją po prostu skopiować i dołączyć do swojego projektu lub po prostu dodać ją do końca dowolnej wersji jQuery.

Wyodrębniłem kod dla ciebie, gdy chcesz go użyć.


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

})();

Jeśli pytasz, dlaczego ktoś potrzebuje deprecjowanej wtyczki, przygotowałem następującą odpowiedź.

Przede wszystkim odpowiedzią jest kompatybilność. Ponieważ jQuery jest oparty na wtyczkach, niektórzy programiści zdecydowali się na użycie .browser z najnowszymi wydaniami jQuery, które nie zawierają $ .browser wszystkich tych wtyczek, w których renderowane są bezużyteczne.

jQuery zwolnił a wtyczka migracji, która została stworzona, aby programiści mogli wykryć, czy ich wtyczka używała jakichkolwiek zdekapitowanych zależności, takich jak $ .browser.

Chociaż pomogło to programistom w łataniu ich wtyczek. jQuery całkowicie upublicznił $ .browser, więc powyższa poprawka jest prawdopodobnie jedynym rozwiązaniem, dopóki twoi programiści nie poprawią lub nie wprowadzą powyższego.

O:  jQuery.browser


92
2018-01-21 01:10



Pomogło mi to uzyskać skrypt innej firmy, który nadal korzystał z $ .browser do pracy z jQuery 1.9.0. Dzięki! - twamley
Znalazłem bardziej oficjalną wersję tego (i innych wycofanych funkcji) tutaj: github.com/jquery/jquery-migrate - twamley
Migrate plugin to dobre narzędzie, które pozwala użytkownikom zobaczyć listę przestarzałych funkcji, jeśli są tam skrypty, zapewnia funkcjonalność przestarzałej funkcji. Nie ma być łatką. - EminezArtus
Zgoda. Odkąd zdecydowałem się pozostać przy wersji 1.8.3, czekam na kolejny gen skryptu innej firmy. - twamley
Absolutnie geniusz! - Kamil


Poniżej przedstawiam alternatywny sposób wykrywania przeglądarki oparty na dostępności funkcji.

Aby wykryć tylko IE, możesz użyć tego:

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

Aby wykryć najpopularniejsze przeglądarki:

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
}

Ta odpowiedź została zaktualizowana, ponieważ IE11 nie obsługuje już kompilacji warunkowej (the /*@cc_on!@*/false sztuczka).
Możesz sprawdzić Czy IE11 usunął kompilację warunkową javascript? więcej informacji na ten temat.
Użyłem sugestii, którą tam przedstawili.
Alternatywnie możesz użyć typeof document.body.style.msTransform == "string" lub document.body.style.msTransform !== window.undefined lub nawet 'msTransform' in document.body.style.


6
2017-09-12 16:29



Dziękuję za udostępnienie tego. mój selektor dat nie działał po uaktualnieniu do VS2013 i ściągnięciu Jquery'ego i Juice z menedżera pakietów Nuget. Wkleiłem kod i wszystko działało ponownie. - user1270384
Zapraszamy. Używam tego kodu do obsługi wszystkich przeglądarek w skrzynkach krawędziowych w niektórych moich kodach javascript. Jeśli KAŻDA z tych rzeczy przestanie działać, a jeśli ją wykryje, proszę, powiedz mi jak najszybciej. - Ismael Miguel
/ * @ cc_on! @ * / false zwraca false dla IE edge - alex
@alex Jaką dokładną wersję i kompilację używasz iw jakim systemie operacyjnym? Jeśli korzystasz z maszyny wirtualnej, czy możesz podać oprogramowanie i wersję? - Ismael Miguel
@IsmaelMiguel - Testowane przez narzędzia deweloperskie F12, Document Mode = Edge (Domyślne), i wpisuję: / * @ cc_on! @ * / False == true w konsoli i zwraca wartość false. Pełna wersja / kompilacja mojego IE to: 11.0.9600.17207. OS = Windows 7. Testowanie w IE na maszynie fizycznej, a nie wirtualnej - alex


Zaktualizowano! 3/24/2015 (przewiń poniżej godziny)

lonesomeday„s odpowiedź jest absolutnie poprawny, po prostu pomyślałem, że dodam tę ciekawostkę. Wcześniej zrobiłem metodę uzyskiwania przeglądarki w Vanilla JS i ostatecznie zakręciłem ją, aby ją zastąpić jQuery.browser w późniejszych wersjach jQuery. Nie zakłóca żadnej części nowej biblioteki jQuery, ale zapewnia taką samą funkcjonalność tradycyjnej jQuery.browser obiekt, a także kilka innych funkcji.


Nowa rozszerzona wersja!

Jest o wiele bardziej dokładny dla nowszej przeglądarki. Ponadto, 90 +% dokładności w testach mobilnych! Nie powiem w 100%, ponieważ nie testowałem w każdej przeglądarce mobilnej, ale dodałem nową funkcję $.browser.mobile boolean / string. Jest fałszywa, jeśli nie mobilna, w przeciwnym razie będzie to nazwa String dla urządzenia mobilnego lub przeglądarki (Best Guesss: Android, RIM Tablet, iPod itp.).

Jedno możliwe zastrzeżenie może nie działać z niektórymi starszymi (nieobsługiwanymi) przeglądarkami, ponieważ jest całkowicie zależne userAgent strunowy.

JS Minified

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





"Właściwość $ .browser jest przestarzała w jQuery 1.3, a jej funkcjonalność może zostać przeniesiona do wtyczki obsługiwanej przez zespół w przyszłej wersji jQuery."

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


3
2018-03-09 17:16



@ Mark_54 Nie ma za co! - Gabriel Santos
$.browser został usunięty w wersji 1.9 - hasMobi - Android Apps


Z oficjalnej dokumentacji na http://api.jquery.com/jQuery.browser/:

Ta właściwość została usunięta w jQuery 1.9 i jest dostępna tylko przez wtyczkę jQuery.migrate.

Możesz użyć na przykład jquery-migrate-1.4.1.js aby zachować istniejący kod lub wtyczki, które używają $ .browser nadal działa, a znajdziesz sposób, aby całkowicie pozbyć się $ .browser z kodu w przyszłości.


0
2017-10-27 00:00