validate useragent support navegador identificar jquery browser

useragent - ¿Está jQuery $.browser en desuso?



useragent jquery (6)

¿Puede alguien decirme si estoy en lo cierto al creer que el $ .browser de jQuery está / ha quedado obsoleto?

¿Continuarán funcionando mis implementaciones existentes? Si no, ¿existe una alternativa fácil de implementar?


"La propiedad $ .browser está en desuso en jQuery 1.3, y su funcionalidad se puede mover a un complemento compatible con el equipo en una versión futura de jQuery".

De api.jquery.com/jQuery.browser


¡Actualizado! 24/3/2015 (desplácese debajo de la hora)

La answer es absolutamente correcta, solo pensé en agregar este tidbit. Hace un tiempo jQuery.browser un método para obtener el navegador en Vanilla JS y eventualmente lo jQuery.browser para reemplazar jQuery.browser en versiones posteriores de jQuery. No interfiere con ninguna parte de la nueva jQuery lib, pero proporciona la misma funcionalidad del objeto jQuery.browser tradicional, así como algunas otras características pequeñas.

Nueva versión extendida!

Es mucho más completo para el navegador más nuevo. Además, ¡más del 90% de precisión en las pruebas móviles! No diré el 100%, ya que no he probado en todos los navegadores móviles, pero la nueva función agrega $.browser.mobile boolean / string. Es falso si no es móvil, de lo contrario será un nombre de cadena para el dispositivo móvil o el navegador (Mejor Guesss como: Android, Tablet RIM, iPod, etc.).

Una advertencia posible, puede no funcionar con algunos navegadores antiguos (no compatibles) ya que depende por userAgent cadena userAgent .

JS Minificado

/* 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>


Segunda pregunta

¿Continuarán funcionando mis implementaciones existentes? Si no, ¿existe una alternativa fácil de implementar?

La respuesta es , pero no sin un poco de trabajo.

$ .browser es un complemento oficial que se incluyó en las versiones anteriores de jQuery, así que como cualquier complemento, puedes copiarlo e incorporarlo en tu proyecto o simplemente puedes agregarlo al final de cualquier versión de jQuery.

He extraído el código para usted en caso de que desee usarlo.

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

Si está preguntando por qué alguien necesitaría un complemento depreciado, he preparado la siguiente respuesta.

En primer lugar, la respuesta es la compatibilidad. Dado que jQuery está basado en un plugin, algunos desarrolladores optaron por usar $ .browser y con las últimas versiones de jQuery que no incluyen $ .browser, donde todos esos complementos quedaron inutilizados.

jQuery lanzó un plugin de migración , que fue creado para que los desarrolladores detectaran si su plugin usaba dependencias depreciadas como $ .browser.

Aunque esto ayudó a los desarrolladores a parchar sus plugins. jQuery ha eliminado $ .browser por completo, por lo que la solución anterior es probablemente la única solución hasta que los desarrolladores pongan parches o incorporen lo anterior.

Acerca de: jQuery.browser


Aquí presento una forma alternativa de detectar un navegador, en función de la disponibilidad de funciones.

Para detectar solo IE, puede usar esto:

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

Para detectar los navegadores más populares:

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 }

Esta respuesta se actualizó porque IE11 ya no es compatible con la compilación condicional (el /*@cc_on!@*/false truco).
Puede verificar ¿IE IE11 eliminó la compilación condicional de JavaScript? para obtener más información sobre este tema.
He usado la sugerencia que presentaron allí.
Alternativamente, puede usar typeof document.body.style.msTransform == "string" o document.body.style.msTransform !== window.undefined o incluso ''msTransform'' in document.body.style .


De api.jquery.com/jQuery.browser :

La propiedad $ .browser está en desuso en jQuery 1.3, y su funcionalidad se puede mover a un complemento compatible con el equipo en una versión futura de jQuery.

Entonces, sí, está en desuso, pero las implementaciones existentes seguirán funcionando. Si se elimina la funcionalidad, es probable que sea fácilmente accesible usando un complemento.

En cuanto a si hay una alternativa ... La respuesta es "sí, probablemente". Es mucho, mucho mejor hacer la detección de características usando $.support lugar de la detección del navegador: detecte la función real que necesita, no el navegador que la proporciona. Las características más importantes que varían de navegador a navegador se detectan con eso.

Actualización 16 de febrero de 2013: en jQuery 1.9, esta característica fue eliminada ( api.jquery.com/jQuery.browser ). Es mucho mejor no usarlo. Si realmente, realmente debe usar su funcionalidad, puede restaurarla con el plugin jQuery Migrate .


De la documentación oficial en api.jquery.com/jQuery.browser :

Esta propiedad se eliminó en jQuery 1.9 y solo está disponible a través del complemento jQuery.migrate.

Puede usar, por ejemplo, jquery-migrate-1.4.1.js para mantener el código o los complementos existentes que usan $ .browser funcionando mientras encuentra una manera de deshacerse totalmente de $ .browser de su código en el futuro.