包含自己的模块不能与firefox sdk require一起使用

时间:2013-11-07 09:20:25

标签: javascript firefox firefox-addon firefox-addon-sdk

由于某些原因,以下代码不起作用:

main.js:

var data = require('self').data;
var {Cc, Ci} = require('chrome');
var mediator = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
var self = require('self');

exports.main = function(options, callbacks)
{
    var tabs = require('sdk/tabs');

    tabs.on("ready",
            function (activeTab)
            {
                activeTab.attach({contentScriptFile: [self.data.url("inject.js")]});
            }
        );
};

inject.js:

var test = require("test");
test.five();
在root-addon-folder / lib下的

test.js:

exports.five = function ()
{
    window.alert("high five!");
};

这里提到turiral:https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/reusable-modules.html 最新更改:http://blog.mozilla.org/addons/2013/01/25/changes-to-require-syntax/

我正在使用Mozilla的在线构建器。

1 个答案:

答案 0 :(得分:2)

您的inject.js是内容脚本。内容脚本无法使用require,只有main.js等特权模块可以使用。

内容脚本没有等效的require机制,但您可以一次从多个data文件加载脚本。

只需从exports中删除test.js位,然后将该文件放在data文件夹中:

function five() {
    window.alert("high five!");
}

然后更改您的attach电话:

activeTab.attach({contentScriptFile: [
  self.data.url("test.js"),
  self.data.url("inject.js")
]});