脚本标记中的HTML注释是最佳实践吗?

下面的练习在我必须使用的内联JavaScript中是相当普遍的:

<script type="text/javascript"> <!-- // Code goes here //--> </script> 

我知道重点在于防止与JavaScript不兼容的浏览器呈现源代码,但这仍然是今天的最佳做法吗? 今天使用的绝大多数浏览器都可以解释JavaScript, 即使是现代的移动设备通常也没有问题。

至于“为什么不呢? 问题:我最近不得不花了几个小时来debugging一个问题,在某个页面的深层隐藏的脚本标签末尾有人把'//'放在' – >'的前面,这导致了神秘的JavaScript错误。

你是做什么? 这仍然被认为是“最佳做法”吗?

重要的是,现在,一个特定的浏览器是否支持JavaScript是不相干的(显然绝大多数都是这样) – 这是无关紧要的,因为几乎所有的理解脚本块,这意味着他们知道忽略JavaScript,即使他们不能解释它。

Matt Kruse在他的JavaScript Toolbox网站上给出了一个稍微更详细的解释 ,以便为什么不在脚本块中使用HTML注释。

引用该页面:


不要在脚本块中使用HTML注释

在javascript(1995)的古代,一些浏览器如Netscape 1.0没有任何脚本标记的支持或知识。 所以当javascript第一次发布的时候,需要一种技术来隐藏旧版浏览器的代码,这样他们就不会在页面中显示文本。 “黑客”是在脚本块中使用HTML注释来隐藏代码。

在脚本中使用HTML注释是不好的

 // DON'T do this! Code is just representative on how things were done <script language="javascript"> <!-- // code here //--> </script> 

今天没有普遍使用的浏览器都不知道<script>标签,所以不再需要隐藏javascript源代码。 事实上,这可能是有害的,原因如下:

  • 在XHTML文档中,源代码实际上将隐藏在所有浏览器中,并且变得毫无用处
  • – 在HTML注释中是不允许的,所以脚本中的任何递减操作都是无效的

我已经停止了。 在某个时候,你只需要放开你的NCSA马赛克。

不,从第一次引入脚本元素时使用的解决方法来说,这是一个宿醉。 今天没有浏览器无法理解脚本元素(即使它理解为“由于脚本被closures或不被支持应被忽略的脚本”)。

在XHTML中,它们是有害的。

我写了一些关于它的历史 。

根据W3C推荐 ,隐藏来自USER AGENTS的脚本数据主要是有用的。

从W3c页面引用:

在JavaScript中评论脚本JavaScript引擎允许在SCRIPT元素的开始处出现string"<!--" ,并在行尾之前忽略更多的字符。 JavaScript将“//”解释为开始注释,延伸到当前行的末尾。 这是需要从JavaScriptparsing器隐藏string“ – >”。

  <SCRIPT type="text/javascript"> <!-- to hide script contents from old browsers function square(i) { document.write("The call passed ", i ," to the function.","<BR>") return i * i } document.write("The function returned ",square(5),".") // end hiding contents from old browsers --> </SCRIPT> 

停止使用这一段时间了。 此外,根据Douglas Crockford的说法,您可以从脚本标记中删除type属性 ,因为大多数浏览器中唯一可用的脚本语言是JavaScript。

如果你手动input,我build议你总是使用外部的js文件,这将有很大的帮助。

关于您的担忧:大多数浏览器今天都是JavaScript安全的。 然而有时候人们可能会编写简单的parsing器来直接获取HTML,而且我必须说,安全报价对于这些客户来说真的很有帮助。 像老Lynx这样的一些非JS客户也会从中受益。

如果在脚本标记之间不包含文本文本 – 也就是说,如果从src文件加载脚本,则可以忘记注释。

我将推荐使用CDATA部分, 如此问题中所述 。

我几年前就停止了。 在这个时代,你真的不需要它。

我不这样做,但有一天我去w3cvalidation我的密码保护网站。 所以我不得不使用他们的直接input法。 它抱怨我的JavaScript,所以我把评论的一切都很好。