如何在Firefox Jetpack附加组件中的后台和内容脚本之间共享javascript代码?

时间:2012-07-09 20:01:40

标签: firefox-addon firefox-addon-sdk

我已经编写了一个库来模仿我的Firefox附加组件的Chrome请求/响应API。显然,我需要在后台进程(main.js)和我的内容脚本中使用此代码。当然必须有比stringifying the imported module更好的方式。

1 个答案:

答案 0 :(得分:2)

有一种半文档化的方式来获取SDK代码模块的URL。这涉及低级模块,不能保证保持稳定。事实上,SDK的这一部分很可能会发生变化,而且这个解决方案将不再适用(如此处最初提供的解决方案)。

也就是说,SDK允许您访问loader module。首先,您需要construct a loader with the same options as the one used by the SDK。然后,您需要使用resolveURI utility function来使用此加载器的映射来解析模块名称:

var {Loader, resolveURI} = require('toolkit/loader');
var options = require('@loader/options');
var loader = Loader(options);
var fooURI = resolveURI("./foo", loader.mapping);

上面的代码生成模块foo的URL。请注意,您需要在某处使用模块foo,否则它将不会包含在您的扩展程序中。如果你还没有使用它,那么虚函数就足够了:

function dummy()
{
  require("foo");
}

使用生成的URL作为内容脚本可以正常工作:

var pageMod = require("page-mod");
pageMod.PageMod({
  include: "*.google.com",
  contentScriptWhen: 'end',
  contentScriptFile: [fooURI, ...]
});