某些 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 浏览器不可见,因为它被视为一个巨大的注释。
在最新版本的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 浏览器不可见,因为它被视为一个巨大的注释。