¿Cómo saber si un navegador está en modo "peculiaridades"?


128

Supongamos que tiene una página con un doctype relativamente estricto y un marcado HTML que está muy cerca de cumplir, 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 contenido sistema de administración o un tema para un sistema de administración de contenido en el que controlas alguna estructura básica y necesitas un poco de JavaScript, pero no eres responsable de todo lo demás que entra en las páginas.

¿Cómo puede saber (o: qué determinará) cuándo el navegador decide entrar en modo "peculiaridades" en lugar de usar su motor más compatible con los estándares?

Estoy buscando respuestas para cada uno de los principales navegadores, ya que IE, Chrome, Safari y Firefox, por supuesto, manejarán eso de manera diferente. ¿Un solo error es suficiente para forzarlo o tienes algún margen de maniobra?

Respuestas:


159

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

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

En Chrome, Safari e IE , ejecute este javascript en la barra de direcciones:

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

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


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

También obtuve BackCompat en Chrome cuando configuré DOCTYPE en 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?
still_dreaming_1

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

19

Como puede consultar el modo de representación en JavaScript, puede tener un Bookmarklet que le dirá qué modo de representación está utilizando una página.

Encontré este bookmarklet en modo render que me funciona bien:

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

11

La respuesta completa a su pregunta específica real de '¿Es un solo error suficiente para forzarlo o tiene algún margen de maniobra?' 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">

forzará el modo caprichos en IE 6 y 7 a pesar de no ser realmente un error (simplemente arrojan un tambaleo total cuando la primera línea del archivo no es una declaración). Puede encontrar una lista rápida de tipos / peculiaridades aquí

Intente pegar la siguiente línea en su HTML para probar (muy mal comportamiento de JavaScript que paso aquí - lo siento ... asegúrese de que esto nunca se active :)

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

Gracias por el probador de JavaScript, porque mis dos primeros intentos de escapar del modo peculiar no funcionaron.
Noumenon

css1compat! = modo peculiar?
Mike Cole


3

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


2

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

El mejor recurso que he encontrado para determinar cómo los diferentes navegadores manejan cada tipo de documento está aquí .


2

Para agregar Firefox con Web Developer Toolbar, puede ver el trío de iconos a la derecha de la barra. El que está más a la izquierda te dice en qué modo estás.


2

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


Esto pierde el punto de la pregunta. Eso no lo ayuda a escribir javascript que se ejecuta en una ruta para el modo peculiar y una ruta diferente para el modo estándar.
Joel Coehoorn

En realidad, no preguntaste cómo hacerlo en Javascript, sino cómo saber qué modo usa el navegador. De todos modos, incluso si no lo dijiste en serio, puede ayudar a otros que lo buscan, yo mismo necesitaba saber cómo saberlo en Firefox y llegué a esta pregunta.
Ronen Festinger el

@JoelCoehoorn ¡El problema real es que nunca explicaste qué es un "doctype relativamente estricto"!
Sr. Lister el

0

en la página html5, escriba " <!DOCTYPE html>" comenzar con la página puede cambiar a document.compatMode = 'CSS1Compat'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.