2008-09-17 10 views
15

Como dice el título, me gustaría encontrar una forma segura basada en características (es decir, sin utilizar navigator.appName o navigator.appVersion) para detectar Google Chrome.¿Forma segura basada en funciones para detectar Google Chrome con Javascript?

Por función BASADA EN quiero decir, por ejemplo:

if(window.ActiveXObject) { 
    // internet explorer! 
} 

Editar: Como se ha señalado, la pregunta no tiene mucho sentido (obviamente, si se desea implementar una función, pruébelo, si quiere detectar un navegador específico, verifique el agente de usuario), lo siento, son las 5 a.m.) Déjeme formularlo así: ¿Hay algún objeto y/o función javascript que sea exclusivo de Chrome? ..

+1

Por qué (window.opera & & navigator.taintEnable & & document.evaluate & & navigator.product = 'Gecko'!!!)? Seguramente si está marcando por característica, entonces no importa qué navegador sea, importa qué características admite. – SCdF

+0

Estoy de acuerdo ... ¿por qué tienes que hacerlo de esta manera? A mí me parece una mala idea, a menos que existan razones de peso, ¿puedes explicarlo? –

+0

Como dije, pregunté sobre todo por curiosidad ... Puse mucho énfasis en la parte "segura", creo :), otra forma de preguntar sería: ¿Cualquier objeto u función de JavaScript que sea exclusivo de Chrome? – jeannicolas

Respuesta

29
isChrome = function() { 
    return Boolean(window.chrome); 
} 
+1

¿Podría mostrarme un ejemplo de uso como alerta '' ¡Bienvenido, usuario de Chrome! ' si su navegador es Chrome –

+0

¿Soy yo solo o simplemente no funciona? (A partir del: 1/14/2014) – VoidKing

+1

Acabo de verificar que funciona la función isChrome anterior, incluso para las versiones más recientes. (Abre tu consola JS en Chrome. Escribe "Boolean (window.chrome)". Deberías ver "true". Pruébalo en otros navegadores y deberías ver "false".) – pcorcoran

4

No es exactamente una respuesta a la pregunta ... pero si está tratando de detectar una marca de navegador específica, el punto de la comprobación de características se pierde. Dudo mucho que otros navegadores estén usando la cadena de userAgent de Chrome, por lo que si su pregunta es '¿es este navegador Chrome', simplemente debería mirar eso. (Por cierto, window.ActiveXObject no garantiza IE, hay complementos para otros navegadores que proporcionan este objeto. Qué tipo de ilustra el punto que estaba tratando de hacer.)

+0

¡Tienes toda la razón! :) Supongo que lo que DEBO hacer es: ¿Hay algún objeto JS que sea exclusivo de Chrome ... solo por curiosidad? ... – jeannicolas

0

Usted no debería estar detectando específicamente Chrome. En todo caso, debería detectar WebKit, ya que, en lo que respecta al renderizado de páginas, Chrome debería comportarse exactamente como otros navegadores WebKit (Safari, Epiphany).

Si necesita no sólo para detectar WebKit, sino también averiguar exactamente lo que se está utilizando la versión, consulte este enlace: http://trac.webkit.org/wiki/DetectingWebKit

Pero una vez más, como otras personas dijeron anteriormente, no se debe detectar navegadores, debería detectar características. Consulte este artículo de ADC para obtener más información al respecto: http://developer.apple.com/internet/webcontent/objectdetection.html

0

Una de las razones por las que es posible que necesite saber que el navegador es Chrome es porque 'cumple' con tanta seriedad los estándares. Ya me encontré con problemas con el código JavaScript antiguo que creía que era compatible con los estándares (según los estándares de FF o Opera, que son bastante buenos), pero Chrome era aún más quisquilloso. Me obligó a reescribir algún código, pero a veces podría ser más fácil usar el truco if (isChrome) {blah ... blah) para hacerlo funcionar. Chrome parece funcionar muy bien (estoy a favor del cumplimiento estándar), pero a veces solo necesitas saber con qué detalle está ejecutando el usuario.

Además, Chrome es muy rápido. El problema es que algún código JavaScript depende involuntariamente de la lentitud de otros navegadores para funcionar correctamente, es decir carga de página, carga de iframes, colocación de enlaces de hojas de estilo y enlaces de JavaScript en el encabezado de página, etc. Estos pueden causar nuevos problemas cuando las funciones están realmente disponibles para interactuar con elementos de página. Así que por ahora, es posible que necesite saber ...

+0

Opera y Safari tienen mejor compatibilidad estándar con JS que Chrome. Ver: http://sputnik.googlelabs.com/ – Savageman

3

Para todos los estándares nazis ...a veces es posible que desee utilizar "tecnologías estándar" sangrantes que aún no son estándar, pero lo serán ... como las características de css3.

Cuál es la razón por la que encontré esta página.

Por alguna razón, Safari ejecuta un combo de radio de borde con sombreado de caja muy bien, pero Chrome no representa la combinación correctamente. Por lo tanto, sería bueno encontrar una forma de detectar Chrome a pesar de que es un juego web para deshabilitar la combinación.

he corrió en cientos de razones para detectar un navegador/versión específica que por lo general termina en el desguace de una idea para una función interesante, porque lo que quiero hacer no es compatible con el gran mal ...

Pero a veces, algunas características son demasiado geniales para no usarlas, incluso si aún no están estandarizadas.

0

que utiliza este código para hacer marcadores para cada navegador (o mostrar un mensaje para webkit)

 
if (window.sidebar) { 
// Mozilla Firefox Bookmark 
window.sidebar.addPanel(title, url,""); 
} else if(window.external) { // IE Favorite 
    if(window.ActiveXObject) { 
    //ie 
    window.external.AddFavorite(url, title); 
    } else { 
    //chrome 
    alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); 
    } 
} else if(window.opera && window.print) { 
// Opera 
    return true; } 
else { //safri 
alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); } 

8

Esta respuesta es muy anticuado, pero fue muy relevante en ese entonces en la edad de piedra.

Creo que la detección de características es más útil que el análisis de navigator.userAgent, ya que busqué la ambigüedad de Opera here. Nadie puede saber si IE16 analizará/MSIE 16.0;/regexp, pero podemos estar seguros de que habrá soporte para documentos. En la vida real, las características son generalmente sinónimos para los navegadores, como: "No XMLHttpRequest? Es el f .... d IE6!" Ningún navegador nonIE admite document.all, pero algunos navegadores como Maxthon pueden codificar el userAgent. (Por supuesto, el script puede definir document.all en Firefox por alguna razón, pero es fácilmente controlable.) Por lo tanto, sugiero esta solución.

EditarHere Encontré recursos completos.

Edit 2 He probado ese document.all también es compatible con Opera!

var is = { 
    ff: window.globalStorage, 
    ie: document.all && !window.opera, 
    ie6: !window.XMLHttpRequest, 
    ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera, 
    ie8: document.documentMode==8, 
    opera: Boolean(window.opera), 
    chrome: Boolean(window.chrome), 
    safari: window.getComputedStyle && !window.globalStorage && !window.opera 
} 

utilizando es simple:

if(is.ie6) { ... } 
+3

es como decir: ¿tienes cabello rubio y dientes blancos? Debe ser Brad Pitt ... – galambalazs

+1

¿Qué quiere decir omg no? Esto es exactamente de lo que se trata la detección de características. –

1

menudo uso de detección de comportamiento/capacidad. Verifique directamente si el navegador admite la funcionalidad antes de trabajar en torno a ella, en lugar de trabajar en función de lo que podría ser el nombre del navegador (user-agent).

Un problema con las soluciones temporales específicas del navegador, no se sabe si el error se ha solucionado o si la característica es compatible ahora. Cuando realiza la detección de capacidad, sabe el navegador la admite directamente o no, y no solo está siendo navegador-ist.

http://diveintohtml5.ep.io/everything.html

0

Isie: !! (window.addEventListener & & window.ActiveXObject!),

isIE6:. Typeof document.createElement ('DIV') style.maxHeight == "indefinido",

isIE7: !! (! Window.! AddEventListener & & window.XMLHttpRequest & & document.querySelectorAll),

isIE8: !! (window.addEventListener & & document.querySelectorAll & & document.documentMode == 8),

isGecko: Navegador. producto == 'Gecko',

isOpera: !! window.opera,

isChrome: !! window.chrome,

isWebkit: !!,

+1

FYI, 'isIE' no funciona ahora que IE9 admite' window.addEventListener'. Un cheque durable para IE no debería romper cada nueva versión de IE. – jfriend00

Cuestiones relacionadas