3

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

Детали:

Таким образом, мы пакаджем файл 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), а при включении плагина это должно быть снова включен.

ответ

3

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

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

+0

Хм Я попробовал и не смог. Есть ли простой демо-пример/пример, который просто вводит скрипт контента и работает для firefox <38.0? – Heinzi

+0

хорошо, вы делаете что-то очень необычное, так почему бы вам пример вашего дела? Во всяком случае, до того, как FF38 аддоны были упакованы с cfx, а не jpm, так что, возможно, вы можете построить его с этим и посмотреть на его внутренние элементы. – the8472