3

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

4

1 回答 1

2

有一种获取 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);

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

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

使用生成的 URL 作为内容脚本就可以了:

var pageMod = require("page-mod");
pageMod.PageMod({
  include: "*.google.com",
  contentScriptWhen: 'end',
  contentScriptFile: [fooURI, ...]
});
于 2012-07-10T09:57:28.987 回答