Классическая ошибка парсинга ASP, когда страница содержит условные комментарии IE - PullRequest
7 голосов
/ 31 января 2010

Мне кажется, я обнаружил ошибку в способе, которым ASP обрабатывает условные комментарии IE (или html-комментарии в целом) ..

Теоретически он не должен обрабатывать их вообще, поскольку они предназначены для клиентской стороны.

На практике ..

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

вернется

<![endif]>

Да, вы прочитали это правильно. Он удалит открывающий комментарий, включит все, что находится в файле, и сохранит закрывающий тег комментария.

Этот курс испортит html и конечно сделает все, что должно было быть выполнено для IE для всех ...

существует очевидный обходной путь, такой как использование server.execute для включения вашего файла вместо директивы include, которая будет работать как положено ..

Скорее всего, это путает окончание --> директивы include с открытием <!-- html-комментария .. Но это вообще не должно беспокоить html-комментариев ..

Есть ли известная причина, по которой это происходит таким образом? или это просто ошибка?

Ответы [ 2 ]

4 голосов
/ 31 января 2010

Это не ошибка.

Синтаксис asp include ожидает найти ключевое слово #include в комментарии разметки. Однако это не требует наличия только пробела от конца последовательности начала комментария до ключевого слова #include. Следовательно, это вполне законно: -

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

Это также законно: -

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

Теперь любое последующее вхождение <!-- внутри комментария обрабатывается так же, как и любой другой текст. Следовательно, это все еще законно: -

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

Это первый <!--, который начинает комментарий, который ASP видит как маркер включения. Второй просто игнорируется текст. Весь комментарий заменяется содержимым файла "myinc.asp". Если файл окажется пустым, то комментарий просто удаляется.

Теперь дополнительный [if IE 6]> по-прежнему просто игнорируется, поэтому весь текст [if IE 6>\r\n<!-- будет игнорироваться. Таким образом: -

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

Заменяется содержимым "emptyfile.asp". Любое последующее: -

<![endif]-->

Отправлено дословно.

0 голосов
/ 31 января 2010

Если вы тестируете в IE 8, то <![endif]--> будет <![endif]>,

пожалуйста, проверьте эту ссылку http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx

условные комментарии для разных версий IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...