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

What is the purpose of the extra <!--> in some IE 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 正在调试的脚本,我需要知道该额外片段的含义才能使解析器准确无误。

研究代码在您的问题中是如何突出显示的。请注意,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 浏览器不可见,因为它被视为一个巨大的注释。