Загрузка внешнего скрипта из расширения Firefox - PullRequest
1 голос
/ 27 июля 2011

В настоящее время я переписываю расширение firefox для внутреннего использования в моей компании.Я начал с перемещения большей части логики во внешний js-файл, загруженный с помощью тега script внутри оверлея xul.(Нам было трудно заставить наших сотрудников постоянно обновляться, поэтому я подумал, что смогу обойти это).Он работал нормально так:

<overlay id="my-overlay"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
 xmlns:html="http://www.w3.org/1999/xhtml">
<script type="application/x-javascript" src="https://my.company.com/path/to/jquery.min.js/>
<script type="application/x-javascript" src="https://my.company.com/path/to/toolbar/main.js"/>

<toolbox id="navigator-toolbox"> 

    <!-- some stuff here -->

</toolbox>

Но тогда у меня возникла безумная идея динамически загружать файл сценария, чтобы я мог использовать настройки, чтобы определить, будет ли он загружаться с рабочих серверов.или альфа / бета серверы.И вот тогда я потерпел неудачу.

Я безуспешно пытался сделать следующее:

  • $. Ajax ({dataType: 'script', ...}) // появляетсяабсолютно ничего не делать
  • $ ('overlay'). appendChild ('', {src: ...}) // тег сценария добавлен, но не выполнен
  • document.createElementNSи т. д. // тег сценария добавляется, но не выполняется
  • Components.utils.import // не принимает протокол http
  • mozIJSSubScriptLoader // не принимает протокол http

Я не пытался Components.utils.evalInSandbox, но, учитывая его ограничения, я боюсь, что это потребовало бы значительных других изменений кода, которые не стоили бы небольшого упрощения цикла разработки.

СЧитая гораздо больше документации и ошибок Mozilla, кажется, что в основном я пытаюсь решить различные проблемы безопасности (я понимаю в принципе, но, конечно, в моем случае, я полностью контролирую оба конца).

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

1 Ответ

1 голос
/ 27 июля 2011

Вы пробовали использовать грубый метод чтения файла с использованием XMLHttpRequest, а затем просто вызвать eval () для его запуска?На первый взгляд это кажется пугающим с точки зрения безопасности, но, как вы говорите, использование тега сценария с URL-адресом источника HTTP в основном то же самое.

...