我已经编写了一个库来模仿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, ...]
});