Detección de navegadores que no son compatibles con jQuery (2)
Perdóneme si hay una respuesta obvia a esta pregunta, pero no he podido encontrarla. Estoy considerando cambiar a jQuery 2 y, aunque no estoy preocupado por la compatibilidad con navegadores antiguos, me gustaría poder decirles a los usuarios con navegadores no compatibles que no pueden usar el sitio.
Veo aquihttp://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/) que puede usar comentarios condicionales para ramificar archivos .js en diferentes versiones de IE, pero creo que jQuery 2.0 deja de lado la compatibilidad con otros navegadores, no solo IE, así que no creo que eso lo haría solo [editar: esto es incorrecto, ver edición más grande a continuación].
En un mundo ideal, cambiaría a jQuery 2 y luego tendría una función javascript única que se llama cuando jQuery me dice que no es compatible con el navegador. ¿Hay una forma sencilla de hacer esto que me estoy perdiendo?
Gracias.
EDITAR:
Me encontré con este post (http://bugs.jquery.com/ticket/13404) que me dirigió aquí:http://jquery.com/browser-support/. Resulta que, en términos de soporte, jQuery 2 solo difiere de jQuery 1.9 en los navegadores IE. Por consiguiente, quizás una mejor pregunta es cómo detectar los navegadores que no son compatibles con jQuery (en general, no solo la versión 2). He actualizado el título de la pregunta.
EDIT2:
Como la detección de características es el enfoque más recomendado para este problema, el método de soporte de jQuery parece relevante aquí (http://api.jquery.com/jQuery.support/). Sin embargo, también parece bastante dudoso confiar (ya que puede cambiar sin previo aviso).
Supongo que esto crea la pregunta clave.¿Cómo se supone que debo tener alguna idea de qué características de jQuery están o no están sujetas a la no compatibilidad de los navegadores antiguos? Por ejemplo, si alguien llega al sitio con una copia de Firefox de 4 versiones anteriores, no habríaalguna idea de qué características necesitaría probar. Sería bueno si jQuery pudiera ofrecer algún tipo de prueba de características totalmente compatible, como esta para HTML5:http://html5test.com/
EDIT3:
Bien, entonces con las declaraciones de inclusión condicionales (resaltadas en las respuestas a continuación, y en el sitio de jQuery), puedes lidiar con versiones antiguas de IE. Sin embargo, para otros navegadores, es un poco complicado. Como no puede confiar en jQuery para decirle nada sobre el soporte del navegador para las funciones x, y, o z, mi enfoque es simplemente consultar el javascript subyacente. Si desea consultar el soporte basado en CSS, puede usar modernizr. Para el soporte basado en javascript, este es el método que utilizo para detectar SUPER versiones antiguas de otros navegadores:
function browser_ok() {
if (
( !Array.prototype.indexOf ) ||
( !Array.prototype.forEach ) ||
( !String.prototype.indexOf ) ||
( !String.prototype.trim ) ||
( !Function.prototype.bind ) ||
( !Object.keys ) ||
( !Object.create ) ||
( !JSON ) ||
( !JSON.stringify ) ||
( !JSON.stringify.length ) ||
( JSON.stringify.length < 3 )
)
{
return false;
}
// # local storage support
// source: http://diveintohtml5.info/storage.html
try {
var local_storage_support = ( 'localStorage' in window && window['localStorage'] !== null );
if ( !local_storage_support ) {
throw new Error("local_storage_support: failed");
}
}
catch ( e ) {
return false;
}
// # AJAX uploads
if ( !window.FormData || !window.FileReader ) {
return false;
}
// # HTML data elements
var body = $("body");
body.data("browser_support_test",42);
if ( body.data("browser_support_test") !== 42 ) {
return false;
}
else {
body.removeData("browser_support_test");
}
return true;
}
AFAICT, esta función debería eliminar todos los navegadores que podrían causar problemas a jQuery por su funcionalidad básica. Si desea hacer algo sofisticado, entonces es probable que haya una pieza específica de funcionalidad que sepa que necesita, para que pueda verificarla específicamente.