sistema replacement operativo navegador identificar detectar jquery css browser-detection

replacement - ¿Cómo hacer la detección del navegador con jQuery 1.3 con $.browser.msie obsoleto?



jquery identificar navegador (16)

¿Cómo debe hacerse la detección del navegador ahora que jQuery 1.3 se ha desaprobado (y supongo que se eliminará en una versión futura) $ .browser.msie y similares?

Lo he usado mucho para determinar en qué navegador estamos para las correcciones de CSS para casi todos los navegadores, como por ejemplo:

$.browser.opera $.browser.safari $.browser.mozilla

... bueno, creo que son todos ellos :)

En los lugares donde lo uso, no estoy seguro de qué problema del navegador está causando el problema, porque muchas veces intento arreglar una diferencia de 1 px en un navegador.

Editar: con la nueva funcionalidad jQuery, no hay forma de determinar si estás en IE6 o IE7. ¿Cómo debería uno determinar esto ahora?


.browser ha quedado en desuso en favor de .support. Más información aquí: jquery.support Lo que esto significa esencialmente es que, en lugar de usar el rastreo del navegador, ahora jquery ofrece detección de soporte y permite un control mucho más detallado sobre lo que el navegador puede hacer.

De la descripción:

Agregado en jQuery 1.3 Una colección de propiedades que representan la presencia de diferentes características o errores del navegador.

jQuery viene con una serie de propiedades incluidas, no dude en agregar la suya propia. Muchas de estas propiedades son de bajo nivel, por lo que es dudoso que sean útiles en el desarrollo general del día a día, pero son utilizadas principalmente por los desarrolladores de complementos y núcleos.

Los valores de todas las propiedades de soporte se determinan mediante la detección de características (y no utiliza ninguna forma de rastreo de navegador)


Estaba enfrentando algo similar, no hay $ .support.png (p.ej.), así que necesito usar $ .browser.version aún, tal vez podamos seguir solicitando más propiedades $ .support.XXXX, tanto según sea necesario.


el soporte de características suena como una buena idea, PERO solo funcionará como está previsto cuando sea compatible con todos los "errores" posibles. Como el primer comentador, no hay $ support.png, ni $ support.stepping, ni $ support.peekaboo, o a, oh, la lista continúa. El problema con esto es que algún código para hacer que un navegador sea compatible inevitablemente será ejecutado por un navegador que no lo necesita.


Pruebe la secuencia de comandos GeckoFix en http://code.labor8.eu/geckoFix , detecta Firefox inferior a 3.0 para que pueda personalizarlo como desee (es decir, agregando más reglas, como Firefox 2, Firefox 3, Opera y Safari). Creo que podría ser lo que estás buscando. Para verificar el agente de usuario solo escriba su barra de direcciones javascript: alert (navigator.userAgent) y encuentre algunos caracteres específicos que necesitará escribir en el script.


Sí, la detección del navegador ha quedado en desuso, pero las propiedades en desuso probablemente no se eliminarán de jQuery en el corto plazo. Y cuando se eliminen, si aún necesita realizar la detección del navegador, puede agregar la misma funcionalidad fácilmente con un complemento pequeño y simple.

Entonces, mi respuesta es no hacer nada al respecto, por ahora :)

editar: incluso te proporcionaré un complemento para utilizar en el futuro (no probado, copiado y pegado desde la fuente jquery):

(function($) { var userAgent = navigator.userAgent.toLowerCase(); $.browser = { version: (userAgent.match( /.+(?:rv|it|ra|ie)[//: ]([/d.]+)/ ) || [0,''0''])[1], safari: /webkit/.test( userAgent ), opera: /opera/.test( userAgent ), msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) }; })(jQuery);


Digo ingeniería inversa desde la base de código de jQuery 1.2.

Vea esta sección del código:

jQuery.browser = { version: (userAgent.match( /.+(?:rv|it|ra|ie)[//: ]([/d.]+)/ ) || [])[1], safari: /webkit/.test( userAgent ), opera: /opera/.test( userAgent ), msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) };

Respete las licencias GPL y MIT y aprenda del código. No copiar y pegar.

O específicamente para oler IE6. Podrías hacerlo:

function IsThisBrowserIE6() { return ((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined)) }


Tengo un fragmento de Javascript que funciona bien en los navegadores Mozilla y Webkit, y también en IE8. Sin embargo, en 6 y 7 se rompe. Esto no tiene nada que ver con el CSS, ni con Javascript pobre, pero con los soportes de IE <8.

Puedo ver de dónde provienen las personas para buscar "características" en comparación con el rastreo del navegador, sin embargo, las características para las que está disponible el rastreo no son relevantes para el código de corte, entonces ¿cuál es la diferencia entre el rastreo del navegador y el rastreo de características hasta ¿TODAS las características están disponibles en el objeto $ .support?


function browserLessThanIE7(){ return (/MSIE ((5//.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32"); }

También podría funcionar bien ... Este busca las versiones 5, 5.5 y 6.

@Nate: change (5 / .5) | 6 en 7 y comprueba la versión 7.


La detección del navegador no está en desuso en jQuery. Página de Doc para jQuery.browser , que dice:

Recomendamos no utilizar esta propiedad, intente utilizar la detección de características en su lugar (consulte jQuery.support).

La depreciación significa "programada para una eliminación futura". Este consejo sobre la detección de capacidades en lugar de agentes de usuario es solo un buen consejo general, y no específico de jQuery. Todo lo que dicen es que están haciendo que sea más fácil hacer lo correcto.

Sin embargo, siempre habrá una necesidad de oler al agente de usuario. A menos que jQuery.support se actualice diariamente por un ejército de desarrolladores, no hay forma de que pueda mantenerse al día con cada error y cada característica en cada versión de punto menor de cada navegador.

Creo que la confusión sobre esto surgió del hecho de que, internamente, jQuery ya no rastrea el navegador. Pero la utilidad API jQuery.browser continuará existiendo.


La detección de funciones suena muy bien, pero cuando escribo un código que no funciona en un navegador determinado, el método más rápido es la detección de navegadores.

Centrar horizontalmente un elemento usando márgenes automáticos funciona para todos los navegadores excepto IE. ¿Qué función pruebo? No tengo idea. Pero sí sé en qué navegador no funciona.

Puedo ver por qué la detección de funciones sería útil en ciertas situaciones, por ej. si un navegador está en modo peculiar / estricto. El mejor compromiso sería utilizar ambos métodos.

A la luz de esto, "recomendamos no utilizar esta propiedad, intente utilizar la detección de características en su lugar". Debe eliminarse de la página de documentación de jQuery.browser. Es engañoso.


Lo que sería una buena idea es agregar navegadores como clase a la etiqueta de cuerpo para css. No estoy seguro si esto funciona porque no ejecuto Windows y tengo un PowerPC pero debería poner una clase de .ie6 a todos los exploradores de Internet 6-9, no muy útil. Use mooModernizr para todo lo demás.

if (Browser.Engine.trident) { var IEbrowser = $(''body''); IEbrowser.addClass(''ie''); }​


¿Por qué no se puede volver a escribir jquery.browser para usar jquery.support internamente para determinar el navegador según las características (quizás complementado con los métodos actuales de jquery.browser cuando sea necesario), para proporcionar un medio conveniente para seleccionar la familia y la versión del navegador? , mientras que tal vez sea más confiable que el jquery.browser de hoy?


Me gustaría señalar que navigator.userAgent no es muy confiable, en el sentido de que es fácilmente modificable y puede no representar al navegador real que está viendo la página. Esta podría ser una de las razones por las cuales $.browser fue depreciado en primer lugar.

Pero por el bien de la pregunta, supongamos que la detección del navegador es absolutamente necesaria .

Me encontré con este fragmento muy interesante de James Padolsey , que en realidad distingue entre los Exploradores de Internet mediante el uso de comentarios condicionales.

He compilado un pequeño fragmento de código con el fragmento de arriba y un código de yepnope.js :

(function(window, doc) { window.detector = window.detector || (function() { var undef, docElement = doc.documentElement, v = 3, div = document.createElement(''div''), all = div.getElementsByTagName(''i''), isGecko = ( ''MozAppearance'' in docElement.style ), isGeckoLTE18 = isGecko && !! doc.createRange().compareNode, isOpera = !! ( window.opera && toString.call( window.opera ) == ''[object Opera]'' ), isWebkit = ( ''webkitAppearance'' in docElement.style ), isNewerWebkit = isWebkit && ''async'' in doc.createElement(''script''); while ( div.innerHTML = ''<!--[if gt IE '' + (++v) + '']><i></i><![endif]-->'', all[0] ); return { isGecko: isGecko, isGeckoLTE18: isGeckoLTE18, isGeckoGT18: isGecko && ! isGeckoLTE18, isOpera: isOpera, isWebkit: isWebkit, isNewerWebkit: isWebkit && ''async'' in doc.createElement(''script''), isIE: ( v > 4 ), ieVersion: ( v > 4 ? v : undef ) }; }()); }(window, document));

Esto diferencia entre los navegadores por sus capacidades.

Solo hay problemas, actualmente no tengo forma de saber entre Safari y Chrome (ambos navegadores Webkit), y entre las versiones de los navegadores Gecko, Webkit y Opera.

Sé que no es perfecto, pero es una ligera mejora con respecto a navigator.userAgent .


Esta puede no ser la forma más limpia para IE 6, pero ciertamente funciona y es fácil de entender:

$(document).ready(function() { ie6catch = $.browser.msie + $.browser.version; if (ie6catch.indexOf("true6") == -1) { alert("This is not Internet Explorer 6"); } });


var browser = { chrome: false, mozilla: false, opera: false, msie: false, safari: false }; var sBrowser, 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);


jQuery 1.3 ha reemplazado las pruebas del navegador .

Francamente, me sorprende la frecuencia con la que los desarrolladores web están preocupados por el navegador en el que se está ejecutando su sitio. En más de 10 años de desarrollo web, puedo pensar en un puñado de casos en los que me he preocupado y mucho menos me he molestado en hacer algo diferente. La razón más común ha sido que los tamaños de fuente mencionados difieren significativamente entre Firefox e IE ( font-size: large es mucho más grande en IE que FF), así que he usado un archivo IEfix.css para corregir eso.

Tal vez deberías mirar Lo que es mejor: ¿Hacks CSS o detección de navegadores? para una discusión más completa sobre el tema.

En resumidas cuentas, debería preocuparse si una característica es compatible o no, no en qué navegador se encuentra.

Es difícil decir algo más sin saber por qué te importa si es IE porque probablemente encontrarás que hay una solución mucho mejor para hacer lo que estás haciendo.