Аддон присоединяет скрипт просто отлично с jpm run, но не с фактическим xpi
Я все еще довольно новичок в addon-sdk и столкнулся с необъяснимой для меня проблемой. До сих пор я использовал jpm run для проверки всего - и все это прекрасно работает. Теперь я близок к тому, чтобы закончить с тем, чего я хочу достичь, поэтому я хотел провести тестовый запуск в "обычном" браузере - в основном, чтобы использовать его в течение пары дней, чтобы посмотреть, все ли работает так, как ожидалось.
Однако процесс установки уже выдает два сообщения об ошибках:
[Исключение... "Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" расположение: "JS frame:: resource://gre/modules/PopupNotifications.jsm:: PopupNo Ресцентрации / <:: строка 667 "данные: нет] (неизвестно)
получает дважды
Ну, пока все хорошо (или плохо). Кнопка переключения, которую добавляет мой аддон, по-прежнему отображается. Нажатие на кнопку открывает панель, которая содержит html-страницу - все еще работает. Файл panel.html содержит кнопку, и это источник моих проблем.
При нажатии кнопка отправляет сообщение в мой основной аддон-файл:
optionsButton.addEventListener("click", function(){
self.port.emit("options-clicked");
});
который прослушивает index.js:
panel.port.on("options-clicked", function () {
tabs.open("./privacyProtector/options.html");
panel.hide();
var optionsTab = tabs[tabs.length - 1];
var worker = optionsTab.attach({
contentScriptFile: "./privacyProtector/js/internalOptions.js",
});
/* send current settings to options */
worker.port.emit("initialize", createSettingsJSON());
});
Теперь вкладка options.html открывается (и панель исчезает), но выглядит так, как будто contentScriptFile не присоединен. Я пытался выяснить, где именно код перестал работать, но не смог. "Console.log()" после
worker.port.emit("initialize", createSettingsJSON());
работает нормально, однако console.log()
self.port.on("initialize", function (message) {
initialize(message);
});
(который находится в internalOptions.js) не отображается в консоли.
Во всяком случае, консоль браузера сообщает:
Использование nsIFile в процессе контента не рекомендуется. NETUtil.jsm:335:12
<недоступно> timers.js:43
с ошибками я понятия не имею, что делать, потому что все это прекрасно работает с "jpm run". Поэтому я был бы благодарен за любую помощь, потому что я абсолютно не знаю, что здесь происходит.
При необходимости я также могу опубликовать больше кода, но я решил, что этот пост уже достаточно длинный.
Спасибо!
Изменить: я загрузил код в GitHub. может быть, это помогает мне легче.
https://github.com/Azlond/TrackingProtector
Вышеупомянутый код находится в data/privacyProtector/js/panel.js, index.js строка 66-91 и data/privacyProtector/js/internalOptions.js.
1 ответ
Ну, мне удалось решить эту проблему.
Вместо того, чтобы вручную прикреплять скрипт к открытой вкладке, я теперь использую pagemod для прикрепления скрипта при каждом открытии страницы параметров.
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "resource://protector/data/privacyProtector/options.html",
contentScriptFile: "./privacyProtector/js/internalOptions.js",
contentScriptWhen: "end",
onAttach: sendSettings
});
Таким образом, страница параметров работает отлично. Я столкнулся с новой проблемой, но я задам ей новый вопрос, так что это может быть отдельной проблемой.