IE和奇怪的评论行为:为什么要为IE打开两次评论?

时间:2016-03-01 14:53:30

标签: javascript html internet-explorer

我在https://itunesconnect.apple.com的登录页面中看到了这个奇怪的脚本:

<script>
    //Some js
    <!--
    if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-')
    //--></script>
    <noscript>Some text<noscript>

据我所知,对于IE来说,它就像:

<script>
    //Some js
    <!--
    <!--
    //--></script>
    <noscript>Some text<noscript>

和其他人一样:

<script>
    //Some js
    <!--
    //--></script>
    <noscript>Some text<noscript>

但是目的是什么? (问题是关于双&#34;&lt;! - - &#34;而不是noscript标签) 为什么在IE上的脚本标签中打开两次HTML注释?

2 个答案:

答案 0 :(得分:1)

没有必要两次打开评论。 (第二个开头标记实际上被认为是评论正文的一部分。)根据Microsoft Developer Network和他们提供的documentation,标准HTML评论的风格如下:

<!--
Insert HTML comment here.
-->

使用以下样式的括号也支持条件注释:

<!--[if expression]>
HTML
<![endif]-->

<![if expression]>
HTML
<![endif]>

<强>更新

当客户端脚本对浏览器来说是新手时,旧浏览器可能不支持使用的脚本。如果浏览器无法识别脚本,则脚本将作为文本打印,因此需要一种解决方法来防止旧浏览器将脚本作为文本打印在网页上。页面底部的注释来自您提供的链接,是防止脚本打印的其中一种解决方法的示例。

<!--
    script here
//-->

如果浏览器支持该脚本,则<!--将被解释为单行评论,//-->也将是单行评论,因为//在脚本中启动单行注释。否则,如果浏览器不支持该脚本,则//不会被解释为脚本中的注释(浏览器会认为它只是纯文本)所以<!-- ... // {{ 1}}将被视为多行注释。这样,如果浏览器支持脚本,它将被读作脚本,否则,它只会被注释掉。

答案 1 :(得分:1)

searchString = Request.Form["inputID"];在调用脚本标记之后立即添加其参数,而不是在标记中。

在您的示例中,在document.write标记之后立即放置起始注释标记会使页面上标记的所有其余内容对于传递script条件的浏览器不可见。即页面的其余部分被视为注释。生成的代码如下所示:

if

在您找到此页面的页面上,唯一的目的似乎是在脚本后隐藏<script> //Some js <!-- if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-') //--> </script> <!--<noscript>Some text<noscript> <p>All the markup in this page will be a part of the comment in IE, if JS is enabled.</p> 标记。但是,在解析页面之后,它将有效地隐藏noscript之后附加到body的所有元素。