2010-10-08 66 views
5

我遇到了一个错误/未公开的功能在IE 7,6.5(也许别人?)。这不会影响Opera(10.5x)Firefox(3.5.x)或其他浏览器(这是我迄今为止测试的所有内容)。它似乎不是JavaScript的文档化的能力。多个@ JS评论错误在IE浏览器

通过在双符号(//@@)中包含注释以双斜线表示的注释,整个.js文件变得无用。我检查了几个变化和这里就是我发现(其中失效= JS没有加载,通过= JS加载):

  1. 失败://@@
  2. 失败://@ @
  3. 失败: //@@@ - 似乎任何数量@不会有所作为
  4. 失败://@@ text - 以下的任何内容似乎并没有帮助
  5. 失败://@[email protected] - @之间的任何内容似乎并没有帮助
  6. 通:// @@
  7. 通:// @ @ - 第一@前面空间似乎防止
  8. 通://hello @@ - 第一@前面的任何内容似乎防止
  9. 通:/*@@*/ - 似乎只适用于//注释风格

IE 7 - 只是忽略该文件,当试图引用该文件的内容时,您会收到“<function/object> is undefined”行中的错误。 IE6.5有正当理由报告“Invalid character”,这显着提高了你发现问题的能力!

等等问题:有谁知道为什么会发生这种情况,发生了什么?
你可以使用它(插入一个空格,使用其他评论风格等),但值得注意的问题在那里,因为调试可能会很费时间。

UPDATE: 如何重现:

来源: flaw.ie.html

<html lang="en"> 
    <head> 
    <title>Test</title> 
    <script src="turnon.cc.js"></script> 
    <script src="flaw.ie.js"></script> 
    </head> 
    <body> 
    World 
    </body> 
</html> 

来源: flaw.ie.js

//@@ 
alert('hello'); 

来源:个turnon.cc.js

/*@cc_on 
@*/ 

结果:
IE:页:世界
FF /歌剧:警告:您好!页面:世界

可能的结论:在IE中打开条件编译之后,请小心使用与语法非常相似的注释。

+0

嘛架法有根本原因,它看起来并不像有一个解决方案(短期不使用与条件编译语句库和自己避免他们是有用的,或者在标志和评论时非常小心)。它看起来像一个错误,但也没有找到/ * cc_off * /命令(至少它没有记录/不能在我必须测试的IE版本中工作) – Rudu 2010-10-14 17:47:21

回答

4
+1

这看起来很有前途 - 我们当然找到了在JS中使用@注释...但是所有示例(我都可以找到)在'/ ** /'注释(单独)中显示,它应该只在你开启条件编译之后才起作用('@cc_on ') - 否则应该忽略它们。如果'/ * @@ * /'注释工作正常,但是它们的解析算法存在一个相当大的缺陷,而'// @@'则不会。 – Rudu 2010-10-08 21:12:08

+1

啊哈!在写出代码来重现这个问题时(我感谢Dr.Molle),我发现使用库“modernizer-1.5.min.js”(未修改)正在发挥重要作用 - 低下并且看到'/ @ cc_on' can (第20行,字符95) - 所以有条件的评论似乎是问题的开始 - 一旦开始,不要使用“// @@”。不合逻辑的'/ * @@ * /'仍然可以。 – Rudu 2010-10-08 21:32:10

1

我无法重现此,也许这取决于您的环境。

看看这个:http://support.microsoft.com/kb/323487/en 也许

+0

它是未编译/未解释的代码(.html文件,包含.css和.js)。 [运行Apache的记录]但情况#3的JScript .NET错误听起来很可能很熟悉 - 这意味着JScript.NET正被(不正确地)使用,而不是Javascript(其中@没有意义) – Rudu 2010-10-08 21:20:16