3

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

它应该是(jQuery):

$("asd").bla();

它是:

("asd").bla();

(美元符号不见了)

现在,在解决了问题之后,我想了解消息本身:当 Firefox 告诉我“Ci”未定义时,它是什么意思。什么是“词”?


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

要重现,只需使用以下 HTML 代码:

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

说清楚:我知道是什么导致了错误消息。我只是想知道 Firefox 试图用“Ci”告诉我什么......

4

3 回答 3

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 内部结构的人才能更好地回答这个问题......


更新:我在与您完全相同的 FF 版本中运行您的示例代码,但它报告错误为:

错误:“asd”.bla 不是函数
源文件:file:///C:/test.html
行:3

也许您正在运行一个扩展/插件来处理这个问题?也许是一些 Greasemonkey 脚本之类的?

于 2008-11-06T17:56:19.830 回答
2

杰森似乎是对的。许多插件(例如 Firebug、Geode)使用 Ci 作为快捷方式:

const Ci = Components.interfaces; 

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

于 2008-11-06T18:47:01.913 回答
-3

假设是CodeIngiter,找不到js文件。

于 2008-11-06T17:56:16.663 回答