2013-08-12 2 views
2

Я работаю над загрузочным расширением для Firefox для Android, и я хочу импортировать js-файл в bootstap.js (например, импортировать компонент в расширения xul). Классический метод использования chrome.manifest to use a resource alia не разрешен для загрузочных расширений. Я попробовал этот код Erik Vold, но это не похоже на работувключая js-файл в bootstrap.js firefox для расширения android

function startup(data) AddonManager.getAddonByID(data.id, function(addon) { 
// Include some utility functions 
include(addon.getResourceURI("includes/scanner.js").spec); 
}); 

Я очень ценю помощь и спасибо.

ответ

5

На самом деле, content is supported в загрузочных дополнениях, так как довольно некоторое время (сначала в Gecko 8 и начиная с Gecko 10, он будет показывать автопогрузчики, IIRC). Вы можете загрузить модули кода js с chrome://yourpackage/content/... не только из ресурсов-URI (с Gecko 4, IIRC). Таким образом, вас не устраивает использование модулей кода в стиле мозилла. Кроме того, несколько дополнений manually add resource substitutions.

Материал, который написал Эрик, использует a custom include function, реализованный в соответствующем bootstrap.js с использованием loadSubScript. Это тоже вариант. Эта схема была изобретена, когда еще не было возможности правильно использовать модули кода js из загрузочных надстроек, например. потому что еще не было Cu.unload.

Использование content + Cu.import + Cu.unload, вероятно, самый простой подход.

Пример реального мира в одном из моих собственных надстроек (Desktop + Android) (остальная часть надстройки написана с использованием пользовательского обычного загрузчика require, так что не отвлекайтесь на это).

+0

nmaier спасибо за ответ, вот как я сделал вещи, и я не могу понять, где я делаю ошибку (trackdetect - это идентификатор моего расширения): в chrome.manifest я написал: content trackdetect chrome/includes/ в bootstrap.js: Cu.import ("chrome: //trackdetect/includes/scanner.j с "); Еще раз спасибо. – user2102196

+0

'content something somedir' будет зарегистрировать содержимое somedir под' chrome: // something/content/'. Следовательно, 'somedir/somefile.js' будет доступен как' chrome: // something/content/somefile.js'. В вашем случае: 'chrome/includes/scanner.js' будет доступен на' chrome: // trackdetect/content/scanner.js'. Для получения дополнительной информации вы можете обратиться к уже связанным документам. – nmaier

+0

Простите за то, что вы так долго ответили на свой вопрос, я сделал изменения, как вы объяснили, но я получаю эту ошибку: E/GeckoConsole (22534): Хром-пакет не зарегистрирован для chrome: //trackdetect/content/scanner.js В начале я подумал, что есть проблема с упаковкой папки, но после распаковки упакованного расширения я обнаружил, что папка там. Итак, я действительно не знаю, в чем причина проблемы, возможно, импорт не " t support "chrome: //"? Я хотел бы загрузить ресурс вручную, но, честно говоря, есть части (ранее предложенного) кода, которые я не понимаю. – user2102196

0

Я нашел способ сделать это:

var IncludedFile={}; 
    Services.scriptloader.loadSubScript(aData.resourceURI.spec + "content/fileName.js", IncludedFile); 

Затем вы можете получить доступ к методам, как это:

IncludedFile.someFunction; 
Смежные вопросы