【问题标题】:Conditional comments only work when file extension is html条件注释仅在文件扩展名为 html 时有效
【发布时间】:2012-05-31 15:24:42
【问题描述】:

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

如果将其保存为 xhtml 文件,则条件 cmets 不起作用,并且无论浏览器如何,页面都会显示“不是 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 和这个网站上搜索几个小时后,我唯一能找到的是第二行,不幸的是它没有做任何事情。

【问题讨论】:

  • 我以前从未见过.xhtml 扩展。您确定您没有将xHTML 混淆为现代 HTML 规范与文件扩展名吗?通常当你在代码中使用严格/过渡xHTML 时,你仍然使用.html 扩展。
  • "将文件名从 home.html 更改为 window.xhtml。" support.fastspring.com/entries/… 如果不是.xhtml,文件将被拒绝

标签: xhtml conditional-comments


【解决方案1】:

您在 IE9 中进行测试,对吗?

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

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

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

真正的 XHTML 要求使用 XML 解析器来解析标记。 XML 解析规则非常严格,不允许像条件 cmets 这样的讨厌的 hack,因此application/xhtml+xml 模式下的 IE9 不支持,实际上也不支持。

【讨论】:

  • 我找不到条件 cmets 可以正常工作:wademcgillis.com/example.xhtml
  • 有趣。您已将 Apache 设置为将 .xhtml 文件作为内容类型 application/xhtml+xml 提供服务,因此适用于 XML 处理的相同问题。请注意,这意味着 IE8 和更早版本根本无法处理 .xhtml 文件。
  • +1 以获得正确的解释。 -½ 表示“通常,XHTML 文件以 text/html 内容类型提供”。虽然这是通常的做法,但为 XHTML 文件提供 application/xhtml+xml 仍然是 The Right Thing To Do™,不应气馁。当浏览器可以依赖其 XML 解析器而不是缓慢的标签汤解析器时,它们会变得更快。
  • @RaphaelSchweikert - 作为一个将我的网页作为application/xhtml+xml 提供给任何说它会接受它的用户代理的人,我同意,并且认为我不鼓励使用text/html,只是,正如你所做的那样,承认现实。然而,浏览器制造商争论说解析 HTML 比解析 XML 慢。特别是,他们认为优化他们的 HTML 解析器需要付出更多的努力,因为它是迄今为止最常用的一种。
【解决方案2】:
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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2016-09-11
    • 2018-10-19
    • 1970-01-01
    • 2021-03-01
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多