条件注释仅在文件扩展名为html时有效

时间:2012-05-25 02:29:21

标签: xhtml conditional-comments

我遇到的问题正是这个问题的标题所说的,我的页面上的条件评论只有在扩展名为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和本网站上搜索几个小时找到的东西是第二行,遗憾的是没有做任何事情。

2 个答案:

答案 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>