【问题标题】:I need help deciphering this javascript我需要帮助来破译这个 javascript
【发布时间】:2013-11-25 17:18:29
【问题描述】:

在一段 HTML 的开头,我发现了这个:

<body><script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
     ...a bunch of if/thens that drive a browser specific line of text...
//-->
//]]></script>

我很困惑,因为我希望 HTML 和 javascript 注释标签 &lt;!-- --&gt;// 阻止代码运行,本质上是解析为

&lt;body&gt;&lt;script type="text/javascript" language="javascript1.2"&gt;&lt;/script&gt;

但是,我正在显示特定于浏览器的文本,并且似乎没有其他地方正在生成它。 &lt;![CDATA[ 是否以某种方式覆盖了 javascript 注释,允许脚本运行,而 CDATA 块内的 HTML cmets 阻止了 javascript 在浏览器中显示?有人可以帮我理解这一切是如何被解析和显示/使用的吗?

【问题讨论】:

标签: javascript comments cdata


【解决方案1】:

&lt;!-- --&gt; 仅用于 HTML cmets,不适用于 javascript cmets。 Javascript 将// 用于单行,/* */ 用于多行 cmets。如果您确实在 javascript 中使用 &lt;!-- --&gt;,它通常会被忽略。一些浏览器可能会抛出一个 javascript 错误。

【讨论】:

    【解决方案2】:

    首先,所有的 JS 代码都放在 CDATA 部分(参见Wikipedia)。这就是为什么有 cmets //&lt;![CDATA[//]]&gt;。 这允许在 JS 代码中编写任意字符,包括被视为 XML 的特殊符号的字符,如''等。

    HTML 注释开始&lt;!-- 表示 JavaScript 中单个注释的开始(请参阅this article)。 HTML 注释结束 - --&gt; 在 JavaScript 中没有任何意义,这就是为什么它前面有 //
    HTML cmets 用于隐藏不支持 JavaScript 的浏览器的 JavaScript 代码。对于该浏览器,代码将只是&lt;!----&gt; 之间的文本,不会显示在页面上。
    以这种方式发表评论是一种非常古老的做法。

    无论如何,最好的办法是将所有 JavaScript 代码放在一个单独的文件中,并使用 &lt;script&gt; 标记包含该文件。这样就可以避免同时使用 CDATA 和 HTML cmets。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多