1

尝试使用 Components.utils.import("chrome://app/content/app1.js"); 时标记“EXPORTED_SYMBOLS 不是数组”异常。

我创建了一个 XUL 应用程序,并从其中一个 JS 文件(比如 app.js)中尝试包含另一个 JS 文件,如上所示。

app.js 和 app1.js 都放置在 content 文件夹中,并且在 chrome.manifest 文件中添加了以下行

“内容应用内容/”

在其他 JS 文件(app1.js)中,我导出了类似的符号

var EXPORTED_SYMBOLS = ["Fooinstance"];

var Fooinstance = {
   foo: function() {
   ...
   }
}

在 app.js 中,

Components.utils.import("chrome://app/content/app1.js"); 
// Error: chrome://app/content/app1.js - EXPORTED_SYMBOLS is not an array 

...
Fooinstance.foo();

我在 XULRunner 17.0.1 win32 库上运行这个 XUL 应用程序。

我查看了此链接中的代码https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Using

它没有帮助,如果我将它作为资源包含它可以工作,但是我不想将它作为资源的一部分包含在内。

你能指出什么错误吗?

4

2 回答 2

0

对于其他人来说,另一个可能的原因是循环依赖。我的情况有点不同,但我有两个 JSM 文件,每个文件都使用 Components.utils.import 相互导入。然后我在其中一个中遇到了这个错误。

于 2014-08-31T18:54:29.757 回答
0

我有同样的问题,我解决了它:1)通过.jsm更改文件扩展名(.js)2)在你的模块上添加第一行导出类以共享。例如:

var EXPORTED_SYMBOLS = ["Xobject"];

function Xobject(){
}
Xobject.prototype.stop = function() {
    return 'stop';
}
Xobject.prototype.run = function() {
    return 'running';
}

3)以这种方式调用

Components.utils.import('resource://gre/modules/Services.jsm' );
Components.utils.import("chrome://myFirstAddOn/content/Xobject.jsm");

var myXobject = new Xobject();
alert(myXobject.run());

希望对你有帮助

于 2013-02-27T23:49:58.653 回答