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.
Este enlace lo podría habilitar si desea https://github.com/jquery/jquery-migrate/#readme
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.
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());