在某些IE条件注释中,额外的<!---->的目的是什么?

时间:2017-06-18 11:55:25

标签: html internet-explorer conditional-comments

在最新版本的WordPress中,页面的一部分包含以下代码:

<!--[if lte IE 8]>
<script type="text/javascript">
    document.body.className = document.body.className.replace( /(^|\s)(no-)?customize-support(?=\s|$)/, '' ) + ' no-customize-support';
</script>
<![endif]-->
<!--[if gte IE 9]><!-->
<script type="text/javascript">
    (function() {
        var request, b = document.body, c = 'className', cs = 'customize-support', rcs = new RegExp('(^|\\s+)(no-)?'+cs+'(\\s+|$)');

        request = true;

        b[c] = b[c].replace( rcs, ' ' );

        b[c] += ( window.postMessage && request ? ' ' : ' no-' ) + cs;
    }());
</script>
<!--<![endif]-->

我的问题是:为什么IE9评论有一个额外的<!-->,但是IE8评论没有?{两个if条件之间有什么区别?我有a PHP-based HTML Minifier脚本,我正在调试,我需要知道额外片段的含义,以使解析器准确。

1 个答案:

答案 0 :(得分:1)

研究如何在您的问题中突出显示代码。请注意,IE9部分是正常突出显示的,而不是像IE8部分那样的巨大注释。

这是非IE浏览器以及IE9及以后的IE9部分。 <!-->位用于终止IE9条件注释,以便非IE浏览器将看到脚本元素以及标记的其余部分并与IE9及更高版本一起使用它,因为它们理解和使用它符合条件。换句话说,对于非IE浏览器以及IE10及更高版本,<!-->位不支持条件注释。 IE9及更早版本的行为不受影响;旧版本将照常遵守条件评论。

没有它们,标记将如下所示:

<!--[if lte IE 8]>
<script type="text/javascript">
    document.body.className = document.body.className.replace( /(^|\s)(no-)?customize-support(?=\s|$)/, '' ) + ' no-customize-support';
</script>
<![endif]-->
<!--[if gte IE 9]>
<script type="text/javascript">
    (function() {
        var request, b = document.body, c = 'className', cs = 'customize-support', rcs = new RegExp('(^|\\s+)(no-)?'+cs+'(\\s+|$)');

        request = true;

        b[c] = b[c].replace( rcs, ' ' );

        b[c] += ( window.postMessage && request ? ' ' : ' no-' ) + cs;
    }());
</script>
<![endif]-->

...这使得整个代码块对非IE浏览器不可见,因为它被视为一个巨大的评论。