Дополнение Firefox: bootstrap.js mit sdk/page-mod для версий < 38.0

tl;dr: Мы создали аддон Firefox, используя Addon SDK. Поскольку компиляция аддона - это один шаг в большей системе сборки (мы также компилируем для chrome), наша система сборки вручную упаковывает xpi и не использует jpm. Однако мы использовали содержимое упакованного аддона jpm в качестве шаблона для написания нашего собственного аддона. Это работает только для Firefox >=38. Есть ли простой способ заставить его работать на более ранних версиях?

Подробности:

Поэтому мы упаковываем xpi-файл, который содержит следующие bootstrap.js:

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";

const { utils: Cu } = Components;
const rootURI = __SCRIPT_URI_SPEC__.replace("bootstrap.js", "");
const COMMONJS_URI = "resource://gre/modules/commonjs";
const { require } = Cu.import(COMMONJS_URI + "/toolkit/require.js", {});
const { Bootstrap } = require(COMMONJS_URI + "/sdk/addon/bootstrap.js");
const { startup, shutdown, install, uninstall } = new Bootstrap(rootURI);

Кроме того, xpi содержит index.js с реальным кодом. Затем этот index.js устанавливает скрипты содержимого для sdk / page-mod.

Таким образом, в файле bootstrap.js функции запуска / выключения связаны с объектом Bootstrap, который затем обрабатывает включение / отключение плагина.

Это хорошо работает в Firefox 40, но я протестировал его с версиями до 38, и он не работает, потому что он не может запустить скрипт bootstrap.js.

Есть ли простой способ заставить его работать на более ранних версиях Firefox? К сожалению, довольно сложно найти документацию по этому вопросу. В частности, мы не хотим прерывать включение / отключение аддона, т. Е. Если пользователь отключает аддон, то также должен быть отключен мод страницы (как это делает класс Bootstrap), а при включении плагина он должен быть снова включен

1 ответ

Разоблачение require Поскольку JSM был введен только недавно, вы просто используете новую функциональность для своего подхода.

Для более старых версий вам придется вместо этого создать собственный экземпляр Loader, который затем можно будет использовать для каких-либо задач.