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



我已经编写了一个库来模仿Chrome为我的Firefox插件提供的请求/响应API。很明显,我需要在后台进程(main.js)和内容脚本中使用这些代码。当然,肯定有比将导入的模块字符串化更好的方法。

有一种半文档化的方法可以获取SDK代码模块的URL。这涉及到不能保证保持稳定的低级模块。事实上,SDK的这一部分很可能会发生变化,这个解决方案将不再工作(就像这里最初提供的解决方案一样)。

也就是说,SDK允许您访问loader模块。因此,首先您需要构建一个具有与SDK使用的相同选项的加载程序。然后,您需要使用resolveURI实用程序函数来使用以下加载器的映射解析模块名称:

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, ...]
});

最新更新