Firefox addon 如何在Firefox Jetpack加载项中的背景脚本和内容脚本之间共享javascript代码?

Firefox addon 如何在Firefox Jetpack加载项中的背景脚本和内容脚本之间共享javascript代码?,firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我已经为我的Firefox插件编写了一个库来模拟Chrome的请求/响应API。显然,我需要在后台进程(main.js)和内容脚本中使用这段代码。肯定有比这更好的方法。有一种半文档化的方法来获取SDK代码模块的URL。这涉及到低级别模块,它们不能保证保持稳定。事实上,SDK的这一部分很可能会发生变化,而此解决方案将不再有效(就像最初在这里介绍的解决方案一样) 也就是说,SDK允许您访问。所以首先你需要。然后,您需要使用此加载程序的映射来解析模块名称: var{Loader,resolveURI}

我已经为我的Firefox插件编写了一个库来模拟Chrome的请求/响应API。显然,我需要在后台进程(main.js)和内容脚本中使用这段代码。肯定有比这更好的方法。

有一种半文档化的方法来获取SDK代码模块的URL。这涉及到低级别模块,它们不能保证保持稳定。事实上,SDK的这一部分很可能会发生变化,而此解决方案将不再有效(就像最初在这里介绍的解决方案一样)

也就是说,SDK允许您访问。所以首先你需要。然后,您需要使用此加载程序的映射来解析模块名称:

var{Loader,resolveURI}=require('toolkit/Loader');
var options=require(“@loader/options”);
变量加载器=加载器(选项);
var fooURI=resolveURI(“./foo”,loader.mapping);
上面的代码生成模块
foo
的URL。请注意,您需要在某处使用模块
foo
,否则它将不会包含在扩展中。如果您还没有使用它,那么虚拟函数就足够了:

函数伪()
{
要求(“foo”);
}
将生成的URL用作内容脚本效果很好:

var pageMod=require(“页面修改”);
pageMod.pageMod({
包括:“*.google.com”,
contentScriptWhen:'结束',
contentScriptFile:[fooURI,…]
});

出于开发目的,我已经将文件从
lib/
符号链接到
data/
。我不确定您为什么需要这个chrome实现,而不仅仅是使用SDK附带的模块?你想达到什么目标?也可以用示例代码扩展您的问题。@canuckistani:我想重点是Chrome和Firefox扩展版本之间的代码重用。@canuckistani Jetpack加载项SDK不提供与Chrome.extension.sendRequest相同的API样式。我的库构建在端口API之上,以允许JSON消息,并提供一个真正的请求-响应模型,其中响应消息仅由为sendRequest方法调用提供的回调处理。e、 g.
sendRequest(/*JSON消息*/,函数(响应){/*somecode*/});sendRequest(/*相同的JSON*/,函数(响应){/*不同的代码*/})谢谢!您的回答让我了解了SDK的工作原理。你知道一个得到认可和支持的解决方案是否正在进行中吗?@dvogel:鉴于我没有看到任何bug,我对此表示怀疑。请随意。但考虑到SDK严格区分特权代码和非特权代码的做法,可能仍然会被拒绝。上述答案似乎不再适用于Firefox 31和SDK 1.17。还有其他解决方案吗?@CyclingBloke:当然,当SDK的加载机制被重写时,未记录的
@打包
模块消失了。现在有了一个半文档化的解决方案,我相应地更新了我的答案。