我正在为firefox for android开发一个自举扩展,我想将一个js文件导入到bootstap.js中(就像在xul扩展中导入一个组件一样)。使用chrome.manifest使用资源alia的经典方法不允许用于自举扩展。我试过Erik Vold的这个代码,但它似乎不起的作用
function startup(data) AddonManager.getAddonByID(data.id, function(addon) {
// Include some utility functions
include(addon.getResourceURI("includes/scanner.js").spec);
});
我真的很感激你的帮助,谢谢你。
实际上,content
在很长一段时间以来就在自举加载项中得到支持(首先在Gecko 8中,从Gecko 10开始,它将自动加载清单IIRC)。您可以从chrome://yourpackage/content/...
加载js代码模块,而不仅仅是从资源URI加载(自Gecko 4,IIRC以来)。因此,没有什么可以阻止您使用mozilla风格的代码模块。此外,一些附加组件手动添加resource
替换。
Erik编写的东西使用了一个自定义的include
函数,该函数在相应的bootstrap.js中使用loadSubScript
实现。这也是一种选择。这个方案是在还不能正确使用自举加载项中的js代码模块时发明的,例如因为还没有Cu.unload
。
使用content
+Cu.import
+Cu.unload
可能是最简单的方法。
我自己的一个附加组件(Desktop+Android)中的真实世界示例(附加组件的其余部分是使用自定义的commonjs风格的require
加载程序编写的,所以不要因此分心)。
chrome.manifest
-使用content
bootstrap.js
-使用带有content
chrome URI的Cu.import
我找到了这样的方法:
var IncludedFile={};
Services.scriptloader.loadSubScript(aData.resourceURI.spec + "content/fileName.js", IncludedFile);
然后你可以访问这样的方法:
IncludedFile.someFunction;