как вызвать функцию в расширении Firefox от кнопки HTML

Как вызвать функцию JavaScript, объявленную в моем расширении, с помощью кнопки HTML от моей веб-страницы?

У меня есть страница HTML с кнопкой внутри. Когда пользователь нажмет кнопку, она вызовет функцию, которую я уже объявил в своем собственном расширении Firefox.

9
задан 7 January 2010 в 02:04
поделиться

3 ответа

Поскольку вы управляете веб-страницей, самым простым и безопасным способом сделать то, что вы хотите, было бы отправить настраиваемое событие DOM в веб-страницу и прослушайте ее в коде расширения:

https://developer.mozilla.org/En/Code_snippets/Interaction_between_privileged_and_non-privileged_pages

Вот пример расширения, которое я написал, которое делает именно это http: / /mozilla.doslash.org/cw/ (не обновлен до последней версии Firefox, но он чистый и его должно быть легко обновить).

7
ответ дан 4 December 2019 в 15:20
поделиться

Ваше расширение Firefox работает в другом Javascript-контексте по сравнению с вашей HTML-страницей, поэтому это расширение не может быть вызвано непосредственно из Javascript на вашей HTML-странице.

Тем не менее, вы можете создать расширение, чтобы разрешить доступ из HTML. HTML Javascript обычно не разрешает доступ к объекту Component, поэтому вам нужно разрешить HTML-код, чтобы получить доступ к объекту в вашем расширении. Для этого создайте XPCOM компонент в вашем расширении и установите объект в категории "Глобальное свойство JavaScript" через объект nsICategoryManager. Имя записи - это строка, используемая из непривилегированного Javascript, значение - это идентификатор контракта для вашего класса XPCOM.

Однако, вам также необходимо разрешить непривилегированный Javascript доступ к вашему объекту, иначе менеджер безопасности скрипта заблокирует доступ. Чтобы разрешить это, реализуйте nsISecurityCheckedComponent - предоставляя canCreateWrapper(в nsIIDPtr iid), canCallMethod(в nsIIDPtr iid, в wstring methodName), canGetProperty(в nsIIDPtr iid, в wstring propertyName) и canSetProperty(в nsIIDPtr iid, в wstring propertyName), чтобы вернуть allAccess для разрешенных свойств, и noAccess в обратном случае.

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

5
ответ дан 4 December 2019 в 15:20
поделиться

Попытайтесь поместить это в начало вашей функции javascript, которая пытается получить доступ к локальному файлу:

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

Это даст пользователю выбор, хотят ли они чтобы позволить вашему коду получить доступ к локальной файловой системе.

1
ответ дан 4 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: