2

我遇到的问题正是这个问题的标题所说的,我页面上的条件评论只有在扩展名是 html 时才有效。

如果将其保存为 xhtml 文件,则条件注释不起作用,并且无论浏览器如何,页面都会显示“不是 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>

通过在谷歌和这个网站上测试和搜索几个小时,我唯一能找到的是第二行,不幸的是它没有做任何事情。

4

2 回答 2

2

你是用IE9测试的吧?

只有在本地测试文件时才会发生这种情况。如果您通过 Web 服务器测试页面,您会发现条件注释可以正常工作,无论文件扩展名如何。

原因是在 IE9(或其他浏览器品牌,但不是 IE8 或更早版本)中使用 .xhtml 扩展名在本地访问文件等同于使用application/xhtml+xml内容类型为页面提供服务。

也就是说,IE9 将文件作为“真正的”XHTML 处理。通常,XHTML 文件以text/html内容类型提供服务,因此作为 HTML 而不是 XHTML 处理。

真正的 XHTML 要求使用 XML 解析器解析标记。XML 解析规则非常严格,不允许像条件注释这样令人讨厌的 hack,因此 IE9application/xhtml+xml模式不支持它们,实际上也不支持它们。

于 2012-05-25T07:03:46.393 回答
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>
于 2015-02-01T01:33:54.580 回答