Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox addon 在Firefox扩展中导入Javascript模块_Firefox Addon_Javascript_Firefox Addon Bootstrap - Fatal编程技术网

Firefox addon 在Firefox扩展中导入Javascript模块

Firefox addon 在Firefox扩展中导入Javascript模块,firefox-addon,javascript,firefox-addon-bootstrap,Firefox Addon,Javascript,Firefox Addon Bootstrap,我正在开发一个简单的Firefox扩展,但在导入自定义Javascript模块文件时遇到了问题。bootstrap.js文件位于根目录下,test.jsm位于content文件夹内。 test.jsm将两个符号foo和bar导出为: this.EXPORTED_SYMBOLS = ["foo", "bar"]; Components.utils.import("chrome://myaddon/content/test.jsm"); 根据这篇文章,我在chrome.manifest文件中已

我正在开发一个简单的Firefox扩展,但在导入自定义Javascript模块文件时遇到了问题。
bootstrap.js
文件位于根目录下,
test.jsm
位于
content
文件夹内。
test.jsm
将两个符号
foo
bar
导出为:

this.EXPORTED_SYMBOLS = ["foo", "bar"];
 Components.utils.import("chrome://myaddon/content/test.jsm");
根据这篇文章,我在
chrome.manifest
文件中已经有了
content
说明:

content     myaddon   content/
因此,我应该能够将
test.jsm
导入
bootstrap.js
中,如下所示:

this.EXPORTED_SYMBOLS = ["foo", "bar"];
 Components.utils.import("chrome://myaddon/content/test.jsm");
但我在浏览器控制台中看到以下两个警告:

addons.xpi
WARN
Error loading bootstrap.js for myaddon@oyenamit: [Exception... "Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsIXPCComponents_Utils.import]"
nsresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)"
location: "JS frame :: resource://gre/modules/addons/XPIProvider.jsm ->
jar:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@oyenamit.xpi!/bootstrap.js :: <TOP_LEVEL> :: line 1"
data: no] Stack trace: resource://gre/modules/addons/XPIProvider.jsm ->
jar:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@oyenamit.xpi!/bootstrap.js:1
< resource://gre/modules/addons/XPIProvider.jsm:4348
< XPI_loadBootstrapScope()@resource://gre/modules/addons/XPIProvider.jsm:4348
< XPI_callBootstrapMethod()@resource://gre/modules/addons/XPIProvider.jsm:4423
< AI_startInstall/<()@resource://gre/modules/addons/XPIProvider.jsm:5849
< next()@self-hosted:675 < TaskImpl_run()@resource://gre/modules/Task.jsm:330
< Handler.prototype.process()@resource://gre/modules/Promise.jsm ->
resource://gre/modules/Promise-backend.js:867 <
this.PromiseWalker.walkerLoop()@resource://gre/modules/Promise.jsm ->
resource://gre/modules/Promise-backend.js:746 <
this.PromiseWalker.scheduleWalkerLoop/<()@resource://gre/modules/Promise.jsm ->
resource://gre/modules/Promise-backend.js:688 < <file:unknown>




addons.xpi
WARN
Exception running bootstrap method startup on myaddon@oyenamit: ReferenceError: foo is not defined (resource://gre/modules/addons/XPIProvider.jsm ->
jar:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@oyenamit.xpi!/bootstrap.js:16:4) JS Stack trace:
startup@resource://gre/modules/addons/XPIProvider.jsm ->
jar:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@bootstrap.js:16:5 <
XPI_callBootstrapMethod@XPIProvider.jsm:4451:9 <
AI_startInstall/<@XPIProvider.jsm:5864:13
addons.xpi
警告
加载的bootstrap.js时出错myaddon@oyenamit:[Exception…”组件返回失败代码:0x80520012(NS\u错误\u未找到文件)[nsExpccomponents\u Utils.import]“
nsresult:“0x80520012(未找到NS错误文件)”
位置:“JS帧::resource://gre/modules/addons/XPIProvider.jsm ->
罐子:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@oyenamit.xpi!/bootstrap.js:::第1行“
数据:无]堆栈跟踪:resource://gre/modules/addons/XPIProvider.jsm ->
罐子:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@oyenamit.xpi/js:1
< resource://gre/modules/addons/XPIProvider.jsm:4348

resource://gre/modules/Promise-backend.js:746 <
this.PromiseWalker.scheduleWalkerLoop/
resource://gre/modules/Promise-backend.js:688 < 
addons.xpi
警告
启动时运行引导方法时出现异常myaddon@oyenamit:ReferenceError:未定义foo(resource://gre/modules/addons/XPIProvider.jsm ->
罐子:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@oyenamit.xpi!/bootstrap.js:16:4)js堆栈跟踪:
startup@resource://gre/modules/addons/XPIProvider.jsm->
罐子:file:///Users/oyenamit/Library/Application%20Support/Firefox/Profiles/profilename/extensions/myaddon@bootstrap.js:16:5<
XPI_callBootstrapMethod@XPIProvider.jsm:4451:9 <

AI_startInstall/自定义JSM模块需要在bootstrap.js文件的
startup
函数中导入,我不知道为什么会这样,但它就是这样工作的。如果在文件顶部导入它,它将不起作用

请确保在关机时卸载,这是一个非常简单的演示和指南,介绍如何执行此操作:


我发现从
bootstrap.js
调用JSM模块的一个结果是,JSM不能直接访问
ADDON\u ENABLE
之类的常量。我们需要从
bootstrap.js
中传递它们。这是真的@Oyenamit注意,此方法不适用于较新的WebExtensions格式。