2008-11-06 69 views
3

我刚刚花了一半时间来找出在JavaScript代码中导致错误消息“Ci未定义”的原因。我终于找到了原因:JavaScript:Ci没有定义

它应该是(jQuery的):

$("asd").bla(); 

它是:

("asd").bla(); 

(美元符号失踪)

现在已经解决了这一问题后,我想了解这个信息本身:当Firefox告诉我“Ci”没有被定义时,它意味着什么。什么是“Ci”?


更新: 我使用的是当前版本的Firefox(3.0.3)。

要重现,只是用HTML代码:

<html><head><title>test</title> 
<script> 
("asd").bla(); 
</script> 
</head><body></body></html> 

要清楚:我知道是什么原因造成的错误消息。我只想知道Firefox试图用“Ci”告诉我什么......

回答

3

我不知道您使用的是哪个版本的FF,但不管如何,该消息可能指的是bla()不是String对象上可用的函数。由于您错过了$,这意味着您错过了一个函数,因此("asd")将评估为一个字符串,然后JavaScript解释器会尝试在该对象上调用bla()。所以,如果你有在你的项目中下面的代码:

String.prototype.bla = function() {}; 

// now this next line will execute without any problems: 
("asd").bla(); 

因此,它是可能的Ci是一些内部Firefox的符号,它仅仅指的是一个函数的想法。这是我的猜测,我想你会需要有人知道一些关于Firefox的内部,以获得更好的回答这个问题......


UPDATE:我正在运行的示例代码中确切相同版本的FF,但它报告的错误为:

Error: "asd".bla is not a function
Source File: file:///C:/test.html
Line: 3

也许你有一个扩展/插件运行,对此有所帮助?也许一些Greasemonkey脚本或什么?

+0

插件:可能... Greasemonkey:它不应该对该主机做任何事......但是谁知道......;) – BlaM 2008-11-06 18:38:25

-3

假设它是CodeIngiter,它无法找到js文件。

+0

我没有使用CodeIgniter。 – BlaM 2008-11-06 18:02:02

2

杰森似乎是对的。许多插件(如萤火虫,的Geode)使用词作为一种快捷方式:

const Ci = Components.interfaces; 

所以插件似乎会导致奇怪的错误消息。