Detectando navegadores que não são suportados pelo jQuery (2)
Perdoe-me se houver uma resposta óbvia para essa pergunta, mas não consegui encontrá-la. Eu estou pensando em mudar para o jQuery 2 e, embora eu não estou preocupado com o suporte a navegadores mais antigos, gostaria de poder dizer aos usuários com navegadores sem suporte que eles não podem usar o site.
Eu vejo aquihttp://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/) que você pode usar comentários condicionais para ramificar arquivos .js em diferentes versões do IE, mas eu acredito que o jQuery 2.0 descarta o suporte para vários outros navegadores também, não apenas o IE, então eu não acho que isso seria feito sozinho [editar: isso está errado, veja edição maior abaixo].
Em um mundo ideal, eu mudaria para o jQuery 2 e teria uma única função de javascript que é chamada quando o jQuery me diz que ele não suporta o navegador. Existe uma maneira simples de fazer isso que estou perdendo?
Obrigado.
EDITAR:
Me deparei com este post (http://bugs.jquery.com/ticket/13404) que me dirigiu aqui:http://jquery.com/browser-support/. Acontece que, em termos de suporte, o jQuery 2 difere apenas do jQuery 1.9 nos navegadores IE. Assim, talvez a melhor pergunta a ser feita é como detectar navegadores que não são suportados pelo jQuery (em geral, não apenas a versão 2) - atualizei o título da pergunta.
EDIT2:
Como a detecção de recursos é a abordagem mais recomendada para esse problema, o método de suporte do jQuery parece relevante aqui (http://api.jquery.com/jQuery.support/). No entanto, também parece bastante duvidoso confiar em (como pode mudar sem aviso prévio).
Suponho que isso crie a questão-chave.Como eu deveria ter alguma idéia de quais recursos do jQuery estão ou não estão sujeitos a possíveis não-suporte de navegadores antigos? Por exemplo, se alguém acessa o site com uma cópia do Firefox que tem 4 versões, eu não teriaqualquer ideia de quais recursos eu precisaria testar. Seria ace se o jQuery pudesse oferecer algum tipo de teste de recurso totalmente suportado, como este para HTML5:http://html5test.com/
EDIT3:
Ok, então com as instruções de inclusão condicional (destacadas nas respostas abaixo e no site do jQuery), você pode lidar com versões antigas do IE. No entanto, para outros navegadores, é um pouco complicado. Como você não pode confiar no jQuery para falar sobre o suporte do navegador para a função x, y ou z, minha abordagem é simplesmente consultar o javascript subjacente. Se você quiser consultar suporte baseado em CSS, você pode usar modernizr. Para suporte baseado em javascript, este é o método que eu uso para detectar versões antigas do SUPER de outros 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, essa função deve eliminar todos os navegadores que possam causar problemas no jQuery por sua funcionalidade básica. Se você quiser fazer algo extravagante, então provavelmente há uma peça específica de funcionalidade que você sabe que você precisa, então você pode verificar especificamente.