Предоставить компонент XPCOM для JavaScript на веб-странице - PullRequest
3 голосов
/ 28 февраля 2011

Я хотел бы написать компонент XPCOM, который будет представлен в виде объекта JavaScript на веб-странице. Что-то вроде Google Gears - это то, что я ищу. То есть после установки расширения Google Gears Firefox объект javascript «google.gears» доступен для любой веб-страницы, которая хочет его использовать. Я нашел много документации Mozilla по разработке XPCOM, но ничего не рассказал о том, как компонент работает с javascript на веб-странице. Это возможно с XPCOM? Нужно ли мне писать плагин Firefox вместо расширения?

Ответы [ 5 ]

7 голосов
/ 01 марта 2011

Я делаю именно это с новым 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

1 голос
/ 01 марта 2011

Старый 3.x способ - зарегистрировать ваш компонент в категории "JavaScript global property". (Это все еще работает в 4.x, но вместо этого вы должны использовать категорию «JavaScript-global-property», поскольку имена категорий больше не могут содержать пробелы.) Ваш объект должен реализовать nsIClassInfo интерфейс, плюс любые интерфейсы, которые вы хотите предоставить контенту. Это не очень полезно, потому что у вас нет возможности узнать, какой скрипт контента обращается к вашему объекту.

1 голос
/ 28 февраля 2011

Эта статья кажется многообещающей:

Вообще говоря, недоверенный контент (например, веб-страница) ничего не могу сделать с большинством компонентов XPCOM, в том числе создавая их. Есть конечно исключения из этой политики - DOM объекты, например, прославляются Компоненты XPCOM с четко определенными интерфейсы для публичного использования. Для веба страница для использования компонента, однако, включая вызов любых методов или свойства, компонент должен явно сказать Mozilla, что это допустимо, а что нет. интерфейс nsISecurityCheckedComponent определяет, как это делается.

Источник : http://weblogs.mozillazine.org/weirdal/archives/017211.html

0 голосов
/ 15 марта 2017

Вы можете сделать это с помощью веб-расширений, я прочитал и больше не буду иметь поддержку

0 голосов
/ 01 марта 2011

Это выполнимо, но вам придется прокси-вызовы для компонента XPCOM. Помните также, что это, вероятно, будет довольно опасно.

См. Мой ответ здесь , чтобы узнать, как представить объекты Chrome в коде содержимого.

...