2009-03-09 19 views
118

Supongamos que tiene una página con un tipo de documento relativamente estricto y marcado HTML que es bastante compatible, pero tal vez se pierda de algunas maneras tontas, tal vez debido al contenido del usuario que está fuera de su control ... digamos que está trabajando en un sistema de gestión de contenido o un tema para un sistema de gestión de contenido donde controlas cierta estructura básica y necesitas algo de javascript, pero no eres responsable de todo lo demás que entra en las páginas.¿Cómo saber si un navegador está en modo "peculiar"?

¿Cómo se puede decir (o: lo que determinará) cuándo el navegador decide entrar en el modo "peculiaridades" en lugar de usar el motor que cumple con los estándares?

Estoy buscando respuestas para cada uno de los principales navegadores, ya que IE, Chrome, Safari y Firefox manejarán todo diferente. ¿Hay un solo error suficiente para forzarlo o tienes algún margen de maniobra?

Respuesta

145

En Firefox y Opera puede determinar si su navegador está en el "modo peculiar" al verificar la información de la página.

Utilizando document.compatMode, le indicará el modo en que se encuentra con la mayoría de los navegadores.

En Chrome, Safari e IE, lleva este JavaScript en la barra de direcciones:

javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.') 

(tenga en cuenta que tendrá que volver a escribir la parte javascript: después de pegar en la barra de direcciones, debido a cambios de seguridad recientes)

+0

Hay otro valor potencial en IE que encontré cuando forcé una página antigua en modo "EDGE". El valor era "BackCompat" –

+0

También recibí BackCompat en Chrome al configurar DOCTYPE como algo completamente inválido. De acuerdo con el código en esta respuesta, si el valor no es CSS1Compat, está en modo peculiar. ¿Es eso realmente cierto? ¿Cuáles son todos los valores posibles? –

+0

Aparentemente BackCompatible es el valor estándar para el modo "peculiaridades"/"compatibilidad". Solo existen los 2 valores: https://developer.mozilla.org/en-US/docs/Web/API/Document/compatMode –

3

Si le dice a IE que debe ser estricto (a través de doctype) no cambiará de opinión a mitad de la página.

4

Según http://www.quirksmode.org/css/quirksmode.html: "El problema era que algunas páginas escritas en el modo de peculiaridades tenían doctypes Por lo tanto cada navegador tiene su propia lista con doctypes que desencadenan peculiaridades modo Ver esta tabla de comparación del navegador para una visión general de estas listas..: http://hsivonen.iki.fi/doctype/ "

esperanza esto ayuda

11

La respuesta completa a su problema real de '¿es un solo error suficiente para obligarlo o tiene cierta libertad de acción? es que depende totalmente del error. Por ejemplo,

<!-- Comment --> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

obligará a modo de peculiaridades en IE 6 7 & a pesar de no realmente Ebing un error (que acaba de lanzar un tambaleante totales cuando la primera línea del archivo no es una declaración). Una lista rápida de tipos/caprichos pueden ser encontrados here

Intente meter la siguiente línea en el código HTML para las pruebas (muy mal behavious Javascript estoy pasando aquí - lo siento ... asegurarse de que esto nunca pasa :) vivo

<a href="javascript:alert(document.compatMode);">What mode am I?</a> 
+0

Gracias por el comprobador de Javascript, porque mis dos primeros intentos para escapar del modo peculiar no funcionó . – Noumenon

+0

css1compat! = ¿Modo peculiar? –

2

Si entiendo correctamente peculiaridades modo, una página que no valida en contra de su tipo de documento declarada no es suficiente para activar el modo de peculiaridades. Simplemente no se mostrará correctamente.

El mejor recurso que he encontrado para determinar cómo manejan los diferentes navegadores cada doctype es here.

19

Como puede consultar el modo de renderizado en JavaScript, puede tener un Bookmarklet que le dirá qué modo de procesamiento está usando una página.

He encontrado this render mode bookmarklet que funciona bien para mí:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.'); 
+0

Muy útil. Gracias. –

2

para Firefox con la barra de herramientas Web Developer añadir, se puede ver en el trío de los iconos de la derecha de la barra. El uno más a la izquierda que dice qué modo se encuentra.

0

en la página HTML 5, escribir "<!DOCTYPE html>" empezar con la página se puede cambiar a document.compatMode = 'CSS1Compat'

2

En IE, verá que en el revelador herramientas (presionando F12), lo dice en el menú: Modo de documento: ... Y también puede forzar un modo diferente allí.

+0

Esto no tiene sentido en la pregunta. Eso no ayuda a escribir javascript que ejecuta una ruta para el modo peculiar y una ruta diferente para el modo estándar. –

+0

En realidad, no preguntó cómo hacerlo en Javascript sino cómo saber qué modo utiliza el navegador. De todos modos, incluso si no lo quiso decir, puede ayudar a otros que lo buscan, yo mismo necesitaba saber cómo saberlo en Firefox y llegué a esta pregunta. –

+0

@JoelCoehoorn ¡El problema real es que nunca explicaste lo que es un "tipo de documento relativamente estricto"! –

Cuestiones relacionadas