1

Я делаю загрузочное расширение для Firefox (на самом деле, пытаясь подключить расширение Chrome). В Chrome это было:Доступ к объектам, определенным в главном сценарии аддона, из сценариев контента и страницы в дополнениях Firefox

  • Справочной страница имеет backgroundApp, который является экземпляром Marionette.Application и его модулей держать магистральные модели данных и сделать хранения и синхронизацию вещи.
  • Всплывающая страница содержит popupApp, которая является еще одним экземпляром Marionette. Приложение и его модули заботятся о пользовательском интерфейсе с определенными в них видами и маршрутизаторами. Для получения данных всплывающее окно использует ссылку на backgroundApp, доступ к которой осуществляется через chrome.extension.getBackgroundPage().

Теперь мне очень трудно найти, как я могу передавать модели в код всплывающей панели в Firefox, все механизмы обмена сообщениями, с которыми я столкнулся до сих пор, принимают только данные JSONable.

+0

Отметьте тег [tag: firefox-addon-sdk], там вы увидите, что люди делают тонну этого, его основную предпосылку большинства дополнений SDK я думаю. – Noitidart

+0

@Noitidart, кажется, что нет никакого способа добиться этого без XPCOM (что займет несколько дней, если не больше, чтобы понять и реализовать), я прав? – stsloth

+0

Совсем нет, это простое сообщение, передаваемое из контентной программы в родительскую песочницу. См. Этот пример: https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel#Scripting_panel_content 'click-link' отправляет обратно в изолированную песочницу addon, которая использует' console.log', используя система сообщений .port. – Noitidart

ответ

1

У вас не будет радости, если вы пытаетесь использовать фреймворки javascript в дополнениях firefox. По крайней мере, если вы используете их за пределами одного объекта окна.

Существует несколько различных, довольно изолированных сред, в которых запускаются скрипты. Если мы рассмотрим e10s (многопроцессорный firefox), то основной код аддона будет выполняться в родительском процессе, тогда как все, что взаимодействует с содержимым страницы, будет запущено в процессе (процессах) контента.

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

Таким образом, вы можете использовать материал основы или марионетки на панели или на невидимой странице (это то, что делает API-интерфейс фоновой страницы?), Но если вы хотите, чтобы они обменивались данными друг с другом, вам придется получать ваши данные в некоторую сериализуемую форму.

В зависимости от ваших потребностей этого может быть достаточно, если вы реализуете конструкторы копирования для своих моделей. То есть конструкторы, которые необязательно принимают простые javascript-объекты (мешки значений) и заново создают правильно напечатанные модели. Это требует, чтобы объекты могли быть полностью восстановлены на основе их перечислимых собственных свойств.