Я перемещаю расширение из Chrome в Firefox, и я использую Add-on SDK. Для доступа к функциям, объявленным в фоновом файле с панели или всплывающего окна, я могу использовать chrome.extension.getBackgroundPage
в Chrome. Есть ли какой-то эквивалент в Firefox, в котором я могу получить доступ к данным/функциям, объявленным в main.js
, или к другому файлу везде?
Обмен данными между файлами в расширении Firefox
Ответ 1
По-видимому, Jetpack не поддерживает это (хотя это возможно и с дополнениями в Firefox).
Но есть глава, которая поможет вам, просто это не так прямо вперед, потому что она включает обмен сообщениями через события между надстройкой и контентом скрипты.
Edit:
Возьмем пример из MDN о расширениях. Вы можете думать о XUL + JavaScript как HTML + JavaScript. В отличие от того, как Jetpack отделяет (песочницы) ваш основной код аддона от вашего контекстного кода (html, javascript, css в панелях, виджетах и т.д.); он запускается в одном "пользовательском пространстве".
Адаптация на оверлей на предыдущей странице и добавление кода Javascript, который работает с XPCOM, вы получаете:
<?xml version="1.0"?>
<overlay id="sample"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript">
function getOS() {
return Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
}
</script>
<statusbar id="status-bar">
<statusbarpanel id="my-panel" label="OS?" onclick="alert(getOS())" />
</statusbar>
</overlay>
И пусть пусть функция находится во внешнем файле, вы просто включаете ее как обычный JavaScript.