validate support name how jquery browser-detection

support - El reemplazo más fácil/más ligero para la detección del navegador jQuery 1.9?



jquery.browser is deprecated (13)

Ayer, varios clientes se quejaron de que algún código dejó de funcionar. Aparentemente, se trata de complementos que usan el jQuery.browser ahora en desuso, que dejó de funcionar ayer cuando se lanzó jQuery 1.9.

Miré (rápidamente) los documentos de cambio de 1.9 y parece que quieren que sustituya algunas bibliotecas pesadas para esa función.

¿Existe un complemento o fragmento de código de peso ligero recomendado para restablecer esa funcionalidad?

Por lo que estos sitios necesitan, es muy básico; Solo necesito la detección más básica de IE vs FF frente a todos los demás.

Sugerencias?


Coloque este código en su sitio (como el archivo js, ​​o después del código de jQuery ...):

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;


Corto y sin embargo Poderoso.

// chrome, safari, webkit, mozilla, msie, opera var chrome = /chrome/i.test(navigator.userAgent);


Extraje la lógica de jQuery.browser en un complemento jquery.browser . El complemento se libera bajo la licencia de MIT.

También agregué compatibilidad con IE11, Opera Webkit y detección de Android.


He usado el siguiente código cuando hago clic en el mismo problema:

<script type="text/javascript"> $(document).ready(function() { //if (!$.browser.webkit && ! $.browser.mozilla) { //depricated if (!navigator.userAgent.match(/mozilla/i) && ! navigator.userAgent.match(/webkit/i) ){ alert(''Let me tell you about Mozilla''); } }); </script>


He usado el siguiente código respondido por Alexx Roche, pero quería detectar MSIE así:

<script type="text/javascript"> $(document).ready(function() { if (navigator.userAgent.match(/msie/i) ){ alert(''I am an old fashioned Internet Explorer''); } }); </script>

¡Espero eso ayude!


La versión exacta de IE se puede detectar mediante la comprobación adicional de la existencia de objetos globales estándar agregados en versiones específicas de IE.

10 or older document.all 9 or older document.all && !window.atob 8 or older document.all && !document.addEventListener 7 or older document.all && !document.querySelector 6 or older document.all && !window.XMLHttpRequest 5.x document.all && !document.compatMode if (document.all && !document.querySelector) { alert(''IE7 or lower''); }

Estas pruebas evitan el uso del userAgent que se usa para suplantación de identidad


Para agregar a esta discusión. Acabo de crear un plugin jquery $ .browser que, en lugar de ''detección'', simplemente analiza el agente de usuario en un objeto fácil de usar. Se puede aplicar fácilmente otra lógica para desglosar y analizar navegadores y plataformas específicos.

He obtenido resultados muy confiables sobre los usuarios de usuarios que se encuentran aquí: UserAgentString.com . Incluso incluí la detección de versión para ie11 (cerca de la parte inferior).

//The following code is by no means perfect, nor is it meant to be a standalone ''detection'' plugin. //It demonstrates parsing the useragent string into an easy to manage object. //Even if it does make detection rediculously easy.. :) //Because this regex makes no assumptions in advance. //IMO, It''s compatibilty and maintainability is much higher than those based on static identifiers. /* uaMatch replacement that parses a useragent string into an object useragent segments can be Name Value OR Name/Value OR Name Segment: Name Value Name: parsed to the last whitespace character Value: value after the last whitespace character Matches: (.NET CLR) (#.##), Android 2.3.4, etc Note: this regex can have leading/trailing whitespace (trimmed for object properties) Segment: Name/Value Matches: all values matching Name/Value Example: Firefox/24.0, Safari/533.1, Version/12.1, etc Segment: Name Matches: identifiers that hold no values (value of ''true'' is implied) Example: Macintosh, Linux, Windows, KHTML, U, etc WARNING: not necessarily compatible with jQuery''s $.browser implementation. - not recommended as a replacement for plugins that require it to function. */ (function ($) { var ua = navigator.userAgent.toLowerCase(); var regex = /compatible; ([/w.+]+)[ //]([/w.+]*)|([/w .+]+)[: //]([/w.+]+)|([/w.+]+)/g; var match = regex.exec(ua); var browser = { }; while (match != null) { var prop = {}; if (match[1]) { prop.type = match[1]; prop.version = match[2]; } else if (match[3]) { prop.type = match[3]; prop.version = match[4]; } else { prop.type = match[5]; } // some expressions have leading whitespace (i couldn''t avoid this without a more complex expression) // trim them and get rid of ''.'' ('' .NET CLR'' = ''net_clr'') prop.type = $.trim(prop.type).replace(".","").replace(" ","_"); var value = prop.version ? prop.version : true; if (browser[prop.type]) { if (!$.isArray(browser[prop.type])) browser[prop.type] = new Array(browser[prop.type]); browser[prop.type].push(value); } else browser[prop.type] = value; match = regex.exec(ua); } for (var i in browser) if (i.indexOf("mac") > -1) browser.mac = true; if (browser.windows_nt && !browser.windows) browser.windows = true; //put known browsers into the ''version'' property for ''some'' jquery compatibility //for sake of argument chromium ''is'' chrome if (browser.chromium && !browser.chrome) browser.chrome = browser.chromium; //chrome / safari / webkit if (browser.chrome) { browser.version = browser.chrome; } else if (browser.safari) { browser.version = browser.safari; } else { if (browser.applewebkit) browser.webkit = browser.applewebkit; if (browser.webkit) browser.version = browser.webkit; } //firefox / gecko if (browser.firefox) { if (browser.rv) browser.version = browser.rv; else browser.version = browser.firefox; } else if (browser.gecko) { if (browser.rv) browser.version = browser.rv; else browser.version = browser.gecko; } //opera if (browser.opera && !browser.version) browser.version = browser.opera; //msie if (browser.trident && browser.rv) //ie11 browser.msie = browser.rv; if (browser.msie) browser.version = browser.msie; $.browser = browser;//Rename to reduce confliction? //WAS USED FOR TESTING & DISCOVERY (very useful) //TODO: remove line below alert(JSON.stringify($.browser)); }) (jQuery);

En Internet Explorer 10, JSON.stringify superará algo como esto:

{"mozilla":"5.0","msie":"10.0","windows_nt":"6.2","trident":"6.0","net4.0e":true,"net4.0c":true,"net_clr":["3.5.30729","2.0.50727","3.0.30729"],"windows":true,"version":"10.0"}



Si todo lo que desea es que sus plugins de jQuery de terceros puedan usar jQuery.browser.msie, aquí hay un proyecto de una sola línea. Solo inclúyelo después de jQuery.

jQuery.browser = jQuery.browser || {msie: navigator.userAgent.match(/msie/i) ? true : false};

Esta es la solución más estúpida posible, pero es todo lo que necesitaba, y funciona, ¡aquí tienes!


Simplemente no puede actualizar hasta que se aleje de los métodos depreciados.

Realmente no debería incluir jquery de un CDN sin especificar un número de versión de todos modos, de alguna manera se frustra el propósito de usar un CDN (sin cacheo).

Aquí hay un enlace a la última versión de jQuery que admite $ .browser:

http://code.jquery.com/jquery-1.8.3.min.js

simplemente reemplace su jquery.js src con ese enlace y su código continuará ejecutándose hasta que esté listo para seguir adelante y dejar de usar funciones depreciadas.

Nota: Fancybox2 todavía usa $ .browser, ese es el más común que he visto hasta ahora desde la actualización.

Actualización: Slickgrid todavía está usando $.browser , no hay actualizaciones a partir del 02/11/2013


jQuery Migrate se creó para permitir la compatibilidad con versiones anteriores mientras actualiza su código.

https://github.com/jquery/jquery-migrate

Como beneficio adicional, registra las funciones obsoletas a medida que las usa. Lo probaría mientras resuelves los problemas. Además, debe establecer una versión específica de jQuery para sus sitios. Es bueno actualizar, pero asegúrese de probar esas actualizaciones antes de ponerlas en producción. Si está utilizando una CDN, aún puede especificar una versión específica en el nombre del archivo.

Ahora, no necesita un complemento jQuery para lo que está pidiendo. Mira el objeto navigator .

appCodeName: "Mozilla" appName: "Netscape" appVersion: "5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" cookieEnabled: true doNotTrack: null geolocation: Geolocation language: "en-US" mimeTypes: MimeTypeArray onLine: true platform: "MacIntel" plugins: PluginArray product: "Gecko" productSub: "20030107" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" vendor: "Google Inc." vendorSub: ""


if(!$.browser){ $.browser={chrome:false,mozilla:false,opera:false,msie:false,safari:false}; var ua=navigator.userAgent; $.each($.browser,function(c,a){ $.browser[c]=((new RegExp(c,''i'').test(ua)))?true:false; if($.browser.mozilla && c ==''mozilla''){$.browser.mozilla=((new RegExp(''firefox'',''i'').test(ua)))?true:false;}; if($.browser.chrome && c ==''safari''){$.browser.safari=false;}; }); };

http://jsfiddle.net/R3AAX/3/


var browser = { chrome: false, mozilla: false, opera: false, msie: false, safari: false }; var sUsrAg = navigator.userAgent; if(sUsrAg.indexOf("Chrome") > -1) { browser.chrome = true; } else if (sUsrAg.indexOf("Safari") > -1) { browser.safari = true; } else if (sUsrAg.indexOf("Opera") > -1) { browser.opera = true; } else if (sUsrAg.indexOf("Firefox") > -1) { browser.mozilla = true; } else if (sUsrAg.indexOf("MSIE") > -1) { browser.msie = true; } console.log(browser.msie);