Не могу заставить работать Components.utils.import(...) в расширении.
Всё время выдаёт ошибку, что не может найти мой импортируемый файл.
Перелопатил статьи на MDN-е:
Using JavaScript code modules,
Components.utils.import и им подобные.
Файл test.js упростил до безобразия:
var EXPORTED_SYMBOLS = ["tst_1"];
var tst_1 = 300;
и положил его вообще во все возможные папки моего расширения. Пробовал его подгрузить и так:
Components.utils.import("chrome://mytoolbar/content/test.js");
и так, прописав алиас для resource в файле chrome.manifest
Components.utils.import("resource://modules/test.js");
Components.utils.import("resource://test.js");
Результат одинаковый - не видит - выдаёт эксепшн о ненайденном файле.
Причина, возможно, в этом, но в самой статье никакого решения не приводится:
Цитата:
|
Custom modules and XPCOM components
Note that prior to Gecko 2.0 JavaScript XPCOM components are loaded before chrome registration. This means you can't use Components.utils.import() with your own resource URL at the top level in a component source. A possible solution is moving the call to Components.utils.import() into the XPCOM component constructor (discussion).
|
По ссылке на discussion открывается темка, где несколько человек пишут, что у них тоже нихрена не работает, и просят поделиться, как этой беде помочь.
Как переместить вызов Components.utils.import в конструктор XPCOM компонента я, честно говоря, понятия не имею, и поиск по интернету как-то ничем особо мне не помог. Видел на фоне подобных вопросов пару тем, где люди отписались, что разобрались с проблемой, но не написали как именно.
Может кто-нибудь что-то полезное по этой теме посоветовать?
Подгружаемый модуль нужен для использования в качестве синглтон объекта для синхронизации работы нескольких экземпляров расширений, появляющихся в результате открытия новых окон (не табов) браузера. Если есть какие-то другие способы для их синхронизации или работы в единственном числе, буду рад информации по ним.