我想我已经发现ASP处理IE条件评论(或者一般的html评论)的方式存在错误。
理论上它根本不应该处理它们,因为它们是为客户端而设计的。
在实践中..
<!--[if IE 6]>
<!--include virtual="emptyfile.asp"-->
<![endif]-->
将返回
<![endif]>
是的,你读得正确..它会删除评论的开头,包括文件中的内容并保留结束评论标签..
这个'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
有明显的解决方法,例如使用server.execute
来包含您的文件而不是include指令,它将按预期工作。
很可能它会将include指令的结尾-->
与html注释的开头<!--
混淆。但它根本不应该打扰html注释..
是否知道这种情况发生的原因?还是只是一个错误?
答案 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<!--
将被忽略。因此: -
<!--[if IE 6>
<!-- #include virtual="emptyfile.asp" -->
替换为“emptyfile.asp”的内容。随后的任何事情: -
<![endif]-->
逐字发送。
答案 1 :(得分:0)
如果您在IE 8中进行测试,则<![endif]-->
将为<![endif]>
,
请查看此链接http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx
不同版本IE的条件评论。