我遇到的问题正是这个问题的标题所说的,我的页面上的条件评论只有在扩展名为html时才有效。
如果将其保存为xhtml文件,则条件注释不起作用,并且无论浏览器如何,页面都显示“Not Internet explorer”。但是,当文件重命名为html时,一切正常。这不是问题,除了页面必须是xhtml文件。
以下是重现问题的最少量代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Title</title>
</head>
<body>
<!--[if IE]>Internet explorer<![endif]-->
<!--[if !IE]>-->Not internet explorer<!--<![endif]-->
</body>
</html>
我唯一可以通过测试和在Google和本网站上搜索几个小时找到的东西是第二行,遗憾的是没有做任何事情。
答案 0 :(得分:1)
你在IE9中测试对吗?
只有在本地测试文件时才会发生这种情况。如果您通过Web服务器测试了该页面,您会发现无论文件扩展名如何,条件注释都能正常工作。
原因是在IE9(或其他品牌的浏览器,但不是IE8或更早版本)中使用.xhtml扩展名本地访问文件等同于为具有application/xhtml+xml
内容类型的页面提供服务。
也就是说,IE9正在将文件处理为“真正的”XHTML。通常,XHTML文件以text/html
内容类型提供,因此将被处理为HTML而不是XHTML。
True XHTML要求使用XML解析器解析标记。 XML解析规则非常严格,并且不允许像条件注释那样令人讨厌的黑客攻击,因此application/xhtml+xml
模式下的IE9不支持,实际上也不支持它们。
答案 1 :(得分:0)
You can use this code after including jquery library and in this way your xhtml will work in the same way than html page.
<script type="text/javascript">//<![CDATA[
var div = document.createElement("div");
div.innerHTML = "<!--[if IE 8]><i></i><![endif]-->";
var isIE8 = (div.getElementsByTagName("i").length == 1);
div.innerHTML = "<!--[if IE 9]><i></i><![endif]-->";
var isIE9 = (div.getElementsByTagName("i").length == 1);
if (isIE8) {
$('html').addClass('ie').addClass('ie8');
} else
if (isIE9) {
$('html').addClass('ie').addClass('ie9');
}
//]]>
</script>