Я хотел бы написать компонент XPCOM, который будет представлен в виде объекта JavaScript на веб-странице. Что-то вроде Google Gears - это то, что я ищу. То есть после установки расширения Google Gears Firefox объект javascript «google.gears» доступен для любой веб-страницы, которая хочет его использовать. Я нашел много документации Mozilla по разработке XPCOM, но ничего не рассказал о том, как компонент работает с javascript на веб-странице. Это возможно с XPCOM? Нужно ли мне писать плагин Firefox вместо расширения?
Я делаю именно это с новым API в Firefox 4 - nsiDOMGlobalPropertyInitializer - который позволяет вам создавать объекты JS для ленивого подключения ко всем окнам.Так создается новая веб-консоль в Firefox 4.
В вашем компоненте должно быть следующее свойство QI:
QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer]),
Вот пример полной реализации врасширение:
https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.js
В общем, QI для Ci.nsIDOMGlobalPropertyInitializer, затем убедитесь, что в вашем манифесте есть строка типа:
category JavaScript-global-property crypt @droplettr.com/domcrypt;1
см: https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest
Старый 3.x способ - зарегистрировать ваш компонент в категории "JavaScript global property". (Это все еще работает в 4.x, но вместо этого вы должны использовать категорию «JavaScript-global-property», поскольку имена категорий больше не могут содержать пробелы.) Ваш объект должен реализовать nsIClassInfo интерфейс, плюс любые интерфейсы, которые вы хотите предоставить контенту. Это не очень полезно, потому что у вас нет возможности узнать, какой скрипт контента обращается к вашему объекту.
Эта статья кажется многообещающей:
Вообще говоря, недоверенный контент (например, веб-страница) ничего не могу сделать с большинством компонентов XPCOM, в том числе создавая их. Есть конечно исключения из этой политики - DOM объекты, например, прославляются Компоненты XPCOM с четко определенными интерфейсы для публичного использования. Для веба страница для использования компонента, однако, включая вызов любых методов или свойства, компонент должен явно сказать Mozilla, что это допустимо, а что нет. интерфейс nsISecurityCheckedComponent определяет, как это делается.
Источник : http://weblogs.mozillazine.org/weirdal/archives/017211.html
Вы можете сделать это с помощью веб-расширений, я прочитал и больше не буду иметь поддержку
Это выполнимо, но вам придется прокси-вызовы для компонента XPCOM. Помните также, что это, вероятно, будет довольно опасно.
См. Мой ответ здесь , чтобы узнать, как представить объекты Chrome в коде содержимого.