validate support navegador msie detectar javascript jquery browser-detection browser-feature-detection

javascript - support - Detección del navegador jQuery 1.9



jquery explorer (4)

En versiones anteriores, solía probar si debería activar popstate manualmente en la carga de la página, ya que Chrome lo activa justo después de la carga, y Firefox e IE no.

if ($.browser.mozilla || $.browser.msie) { $(window).trigger(''popstate''); }

Ahora que bajaron el objeto del navegador en 1.9, ¿cómo debería probar estos navegadores? ¿O cómo popstate si necesito hacer popstate en la carga de la página o no?

El código es:

$(function(){ $(window).on(''popstate'', popState); // manual trigger loads template by URL in FF/IE. if ($.browser.mozilla || $.browser.msie) { $(window).trigger(''popstate''); } });

Actualizar

Fui por esto:

function popState(e){ var initial = e.originalEvent === undefined || e.originalEvent.state === null; if(!initial){ activateRoute({ key: e.originalEvent.state.key, settings: e.originalEvent.state.settings },''replace''); } } function init(){ $(window).on(''popstate'', popState); $(function(){ var route = getRoute(document.location.pathname); activateRoute(route, ''replace''); }); }


Debe agregar un poco de cordura a su controlador de estado popstate , y asegúrese de que no haga nada costoso si hace "pop" en el mismo estado en el que comenzó. Entonces, no puede preocuparse por el navegador, y en su lugar simplemente llame a su popstate en el documento listo:

$(function(){ $(window).on(''popstate'', popState); // call popstate on document ready $(popstate); });

La respuesta que sugiere que pegue el código de $.browser nuevamente en su entorno es una forma excesiva de soportar una mala práctica. Puedes contar con la detección del 99% de las cosas que necesitas. Casi todos los usos de $.browser son peligrosos. Casi siempre hay formas de detectar eso.

La comunidad de JavaScript ha estado en contra del rastreo del navegador durante mucho tiempo. Here hay una publicación de 2009 que nos dice por qué es una mala idea. Hay muchos otros

Te ruego que no vuelvas a copiar $.browser en tu código, el equipo de jQuery decidió matarlo por una razón.



Supongo que poner este código haría el truco por ti. No se olvide de hacer cambios si es necesario según su requerimiento.

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;

Para su información - jQuery Docs

Recomendamos no usar esta propiedad; en su lugar, intente utilizar la detección de características (consulte jQuery.support). jQuery.browser se puede mover a un complemento en una versión futura de jQuery.

jQuery.browser

jQuery.support


Here hay una manera rápida de resolver este problema. Agregue esta línea de códigos a su jQuery-1.9.js y reemplace $ .browser con jQuery.browser

jQuery.browser = {}; jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit /.test(navigator.userAgent.toLowerCase()); jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase()); jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase()); jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase());

Here