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