2010-01-31 18 views
6

creo que he identificado un error en la forma ASP maneja IE comentarios condicionales (o comentarios HTML en general) ..ASP clásico error de análisis cuando la página contiene comentarios condicionales de IE

En teoría no debería manejarlos en absoluto, ya que son para el lado del cliente ..

En la práctica ..

<!--[if IE 6]> 
<!--include virtual="emptyfile.asp"--> 
<![endif]--> 

volverá

<![endif]> 

Sí, lo leyó correctamente ... eliminará la apertura del comentario incluya lo que esté en el archivo y guarde la etiqueta de comentario de cierre ..

Esto por supuesto estropeará el html y por supuesto hará lo fue para el IE que se ejecutará para todos ...

hay solución obvia como el uso server.execute incluir su archivo en lugar de la directiva de inclusión, que funcionará como se esperaba ..

lo más probable es que confunde la terminación --> de la directiva include con la apertura <!-- del comentario html .. Pero no debería molestar con comentarios html en absoluto ..

¿Hay alguna razón por la que esto sucede de esta manera? o es solo un error?

+1

¿No estás seguro de por qué esto es un CW? – AnthonyWJones

+0

No lo vi como una pregunta de programación * per se *. –

Respuesta

4

Esto no es un error.

La sintaxis asp include espera encontrar la palabra clave #include en un comentario de marcado. Sin embargo, no requiere que solo haya espacios en blanco desde el final de la secuencia de inicio de comentarios hasta la palabra clave #include. Por lo tanto esto es bastante jurídico: -

<!-- pink elephants #include virtual="myinc.asp" --> 

Esto también es legal: -

<!-- 
#include virtual="myinc.asp" 
--> 

Ahora cualquier ocurrencia subsiguiente de la <!-- dentro de un comentario es tratado como cualquier otro texto. Por tanto, este sigue siendo legal: -

<!-- 
<!-- #include virtual="myinc.asp" --> 

Su primera <!-- que comienza el comentario de que es visto como un marcador de incluir por ASP. El segundo es solo texto ignorado. El comentario completo se reemplaza por el contenido del archivo "myinc.asp". Si el archivo está vacío, el comentario simplemente se elimina.

Ahora, el [if IE 6]> adicional sigue siendo texto ignorado por lo que se ignorará el texto completo de [if IE 6>\r\n<!--.Por lo tanto: -

<!--[if IE 6> 
<!-- #include virtual="emptyfile.asp" --> 

se sustituye por el contenido de "emptyfile.asp". Cualquier subsecuente: -

<![endif]--> 

Se envía textualmente.

+0

+1 Gracias por confirmar lo que sospechaba y por ir en detalles! Tiene perfecto sentido. –

0

Si está probando en IE 8, entonces el <![endif]--> habrá <![endif]>,

compruebe este enlace http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx

comentarios condicionales para diferentes versiones de IE.

+0

En realidad, el problema ocurre en todos los navegadores ... ya que es una mala conducta del servidor y no una cliente ... –

+0

No es un error como se menciona en la respuesta anterior, gracias Anthony – Ravia

Cuestiones relacionadas