2010-01-31 103 views
6

我想我已经确定了ASP处理IE条件注释(或HTML注释一般)的方式中的错误经典ASP解析错误..当页面包含IE条件注释

理论上它不应该在处理它们所有因为它们意味着客户端..

在实践..

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

将返回

<![endif]> 

是的,你读的正确..它将删除评论的开头包括文件中的任何内容,并保留结束评论标签。

这个'课程会弄乱HTML和of'course使无论是为IE浏览器对所有被执行...

有明显的解决方法,如使用server.execute包括您的文件,而不是include指令,预期这将工作..

最有可能混淆包含指令的结尾-->与html评论的开头<!-- .. 但它不应该打扰所有的HTML意见..

有没有一个知道这样的事情发生的原因?或者它只是一个错误?

+1

不确定为什么这是一个CW? – AnthonyWJones

+0

我没有把它看作是一个编程问题*本身*。 –

回答

4

这不是一个错误。

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<!--都会被忽略文字。因此: -

​​

被替换为“emptyfile.asp”的内容。任何后续: -

<![endif]--> 

是逐字发送的。

+0

+1感谢您确认我怀疑和去细节!它非常有意义。 –

0

如果您在IE 8测试则<![endif]--><![endif]>

请检查此链接为不同版本的IE http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx

条件注释。

+0

其实问题发生在所有的浏览器..因为它是一个服务器的错误行为,而不是一个客户端.. –

+0

这不是一个错误,因为在上面的答案中提到,感谢安东尼 – Ravia