Me gusta hacer una combinación de jQuery y CSS para resolver este problema. Este enfoque fue inspirado por modernizr, que agrega dinámicamente todas las habilidades del navegador como clases al elemento html.
// Detect Browser
$.each(jQuery.browser, function(i, val) {
$("html").addClass(i);
$("html").addClass(val);
});
// Detect Operating System
$("html").addClass(navigator.platform);
El resultado de ejecutar el código anterior me da esta salida cuando veo una página e inspeccionar el DOM. Un problema es que estoy en Mac con Chrome, pero el objeto de navegador de jQuery cree que estoy usando Safari, que también es un navegador webkit.
<html class="webkit version 535.1 safari MacIntel">
Si imprime navigator.userAgent de javascript obtendrá un resultado con toneladas de información de este tipo
Mozilla-5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1
msie
es la etiqueta jQuery.browser asignado para IE para que yo pudiera hacer algo como esto en mi CSS sin necesidad de instrucciones condicionales si añado el navegador como una clase a las etiquetas hTML o del cuerpo:
h1 { /* my regular h1 styles */ }
.msie h1 { /* IE edge case styles for h1 treatment */ }
en jQuery usted podría utilizar su fantástica selector motor para buscar versiones # y varias combinaciones para atacar problemas directamente que solo se aplican a versiones de navegador y combinaciones de sistema operativo específicas. Simplemente genere toda la clase userAgent string html, solo asegúrese de limpiar esa cadena eliminando los caracteres /().
http://api.jquery.com/jQuery.browser/
@Sky tenían un gran enlace para este http://www.quirksmode.org/js/detect.html que se podría utilizar para obtener el navegador más precisa la información de sistema operativo que se podría añadir como clases al elemento HTML.
Para las fuentes, en particular, puede especificar una lista y si la primera fuente no se encuentra en ese sistema en particular, se utiliza la siguiente repliegue, a continuación, el siguiente, y así sucesivamente. –
Cuando Stanford instaló por primera vez un sistema de tiempo compartido para estudiantes de pregrado, fue supervisado por un ubergeek (¿Richard Gabriel?) Que respondió a todas mis preguntas con "Te puedo decir eso, ¿pero es eso lo que realmente quieres saber?" Esta pregunta me recuerda esos días ... – Spike0xff