validacion - ¿Forma segura basada en funciones para detectar Google Chrome con Javascript?
validar formulario javascript html5 (10)
Como dice el título, me gustaría encontrar una forma segura basada en características (es decir, sin usar navigator.appName o navigator.appVersion) para detectar Google Chrome.
Por basado en características quiero decir, por ejemplo:
if(window.ActiveXObject) {
// internet explorer!
}
Editar: como se ha señalado, la pregunta no tiene mucho sentido (obviamente, si desea implementar una función, la prueba, si desea detectar un navegador específico, consulte al agente de usuario), lo siento, son las 5 de la mañana;) Déjame formularlo así: ¿Hay algún objeto de JavaScript y / o características que sean exclusivas de Chrome ...?
No deberías detectar Chrome específicamente. 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 solo detectar WebKit, sino también averiguar exactamente qué versión está utilizando, consulte este enlace: http://trac.webkit.org/wiki/DetectingWebKit.
Pero, de nuevo, como dijeron otras personas anteriormente, no debes detectar los navegadores, debes detectar las características. Consulte este artículo de ADC para obtener más información al respecto: http://developer.apple.com/internet/webcontent/objectdetection.html
No es exactamente una respuesta a la pregunta ... pero si está tratando de detectar una marca de navegador específica, el punto de 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. Que tipo de ilustra el punto que estaba tratando de hacer.)
isChrome = function() {
return Boolean(window.chrome);
}
Por lo tanto, si acepta el punto de Marijn y está interesado en probar la cadena de agente de usuario a través de javascript:
var is_chrome = navigator.userAgent.toLowerCase().indexOf(''chrome'') > -1;
(Crédito a: http://davidwalsh.name/detecting-google-chrome-javascript )
Aquí hay un análisis / desglose muy bueno de la cadena de agentes de usuario de cromos: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string
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 border-radius con box-shadow 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.
Me encontré con cientos de razones para detectar un navegador / versión específico que generalmente termina en eliminar 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.
Una de las razones por las que podría necesitar saber que el navegador es Chrome es porque ''cumple'' con tanta exactitud 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 forzó 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 hoja de estilo y enlaces de JavaScript en el encabezado de página, etc. Esto puede causar nuevos problemas cuando las funciones están realmente disponibles para interactuar con elementos de página. Entonces, por ahora, realmente deberías saber ...
Uso este código para hacer marcadores para cada navegador (o mostrar un mensaje para el kit web)
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''); }
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 aquí . 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? It is the 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.
Editar aquí encontré recursos completos.
Editar 2 He probado ese documento. ¡Todo 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
}
Usar es simple:
if(is.ie6) { ... }
No he probado la detección de safari, ¿alguien puede ayudarme?
isIE: !! (! window.addEventListener && window.ActiveXObject),
isIE6: typeof document.createElement (''DIV''). style.maxHeight == "undefined",
isIE7: !! (! window.addEventListener && window.XMLHttpRequest &&! document.querySelectorAll),
isIE8: !! (! window.addEventListener && document.querySelectorAll && document.documentMode == 8),
isGecko: navigator.product == ''Gecko'',
isOpera: !! window.opera,
isChrome: !! window.chrome,
isWebkit: !! (! window.opera &&! navigator.taintEnable && document.evaluate && navigator.product! = ''Gecko''),
A menudo uso 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 es que no sabe si el error se ha solucionado o si la característica es compatible ahora. Cuando realiza la detección de capacidad, sabe que el navegador la admite directamente o no, y no solo está siendo navegante.