Pregunta

Al igual que muchos desarrolladores que trabajan en los sitios web de Internet Explorer, me parece que venir a través de un montón de errores que son causadas por el notorio bandera hasLayout .

Yo entiendo lo que hace esta bandera y cómo funciona (en su mayor parte). Una buena explicación que leí el otro día (aunque no puedo encontrar la fuente) es que hasLayout en IE esencialmente significa "Hacer este elemento un rectángulo."

Es obvio que es más complicado que eso, pero está bastante bien resumir con que (en mi opinión).

Lo que no entiendo es por qué el navegador utiliza este indicador. Al buscar una respuesta, encontré uno que sonaba lógico:

  

Internet Explorer tuvo que lidiar con el código heredado muy antigua de delante CSS estaba realmente en plena marcha. Como una decisión arquitectónica para hacer que el navegador fácil de añadir CSS a ella, se utilizó la bandera hasLayout para desencadenar ciertas propiedades CSS para que la página se procesa de forma correcta. Esto se remonta a alrededor del momento del IE4.

Esto casi tenía sentido para mí, hasta que se dio cuenta de que Firefox (Netscape en ese momento) tuvo que lidiar con el mismo problema. Netscape ha sido de alrededor de más o menos el tiempo que Internet Explorer, sin embargo, no necesita ninguna bandera hasLayout interna, o algo similar, por lo que yo sé.

En vista de que la bandera hasLayout es la fuente de muchos errores en Internet Explorer, ¿alguien sabe por qué IE tiene esta bandera y otros navegadores no lo necesita?

Esto es algo que me gustaría saber puramente por curiosidad si alguien tiene alguna teoría o pasa a saber la respuesta. Me gustaría entender más acerca de por qué (o por qué no) esta bandera es útil.

Otros consejos

Es muy difícil saber sin ser capaz de mirar a su código fuente.

Los siguientes enlaces son los más informativos que he encontrado hasta ahora:

La primera cita un documento obsoleto que contiene una frase muy interesante:

  

A nivel interno, teniendo la disposición significa que un elemento es responsable de la elaboración de su propio contenido.

Y el segundo dice:

  

El modelo de objetos en el interior Explorador parece ser un híbrido de un modelo de documento y su modelo tradicional de aplicaciones.

Poniendo los dos juntos, mi suposición es que los elementos con hasLayout están en ventanas de datos en el sentido de la API de Win32 - es decir, las cosas CreateWindow trata. Los elementos sin hasLayout entonces no tienen su propia "ventana", pero se sienten atraídos por su antepasado hasLayout que tiene más cercano, mediante algún tipo de código de diseño (algo así como clases de diseño de Qt). Dado que sólo los verdaderos "ventanas" tienen el código de diseño (que atrae a sus Descentants esquemas de menos), que son los que "tienen el diseño", por lo hasLayout.

Si ese es el caso, habría dos rutas de código código de diseño diferente (el de hasLayout, que tendría que situar las "ventanas" para que puedan extraerse más tarde usando el sistema normal de dibujo ventana, y la que atrae a los niños de la "ventana" hasLayout con la mano mientras dibuja la "ventana"). Dado que todo el código tiene errores (y la evidencia anedoctal dice IE <= 6 tiene más que la media), ambas rutas de código tendrían diferente insectos, que explican por qué la adición o eliminación hasLayout (conmutación de manera efectiva a la otra ruta de código ) cambia el conjunto de errores que afectan al elemento en cuestión. No sólo eso, pero ya que tiene dos rutas de código que trabajan en el mismo documento, el iteraction de ambas rutas de código sería otra rica fuente de errores sutiles.

Otros navegadores probablemente evitarse el problema simplemente mediante el uso de una arquitectura que no tiene un camino trazado tales dual.

Si mi suposición es correcta, yo diría que si se ha utilizado una herramienta para mostrar todas las ventanas secundarias del navegador está usando, se verá que cada elemento hasLayout visible tiene uno, mientras que los elementos de diseño-menos no tienen uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top