Импорт модуля Javascript в расширение Firefox
Я разрабатываю простое расширение Firefox, но у меня возникли проблемы с импортом моего пользовательского файла модуля Javascript. Файл bootstrap.js
находится в корне, а test.jsm
- в папке content
.
test.jsm
экспортирует 2 символа foo
и bar
как:
this.EXPORTED_SYMBOLS = ["foo", "bar"];
Согласно статье Using JavaScript code modules , у меня уже есть инструкция content
в файле chrome.manifest
:
content myaddon content/
Таким образом, я должен быть в состоянии импортировать test.jsm
в bootstrap.js
Как:
Components.utils.import("chrome://myaddon/content/test.jsm");
Но я вижу следующие 2 предупреждения в консоль браузера:
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
Что я делаю не так? Я использую Firefox 39.0.
Пример файла XPI можно загрузить изздесь .
1 ответ:
Пользовательские модули JSM необходимо импортировать в функцию
startup
вашего bootstrap.js file, я не знаю, почему это так, но это просто работает так. Он не будет работать, если вы импортируете его в верхней части файла.Обязательно выгрузите его при выключении, это очень простая демонстрация и руководство о том, как это сделать:
Https://gist.github.com/Noitidart/9045387#file-bootstrap-js-L6