Использование плагина, созданного с помощью Firebreath в расширении Firefox?
Можно ли использовать.dll, созданный с помощью Firebreath, в расширении Firefox?
В настоящее время я пытаюсь перенести расширение, созданное для Google Chrome, которое использует javascript для получения HTML-кода документа, а затем вызывает функцию из.dll и передает HTML-код документа в качестве параметра. Затем.dll сохраняет файл и запускает программу.
Есть ли простой способ перенести эту функциональность на Firefox? Или мне придется переписать код с помощью XPCOM?
3 ответа
XPCOM слишком сложен для простых вещей, поэтому Firefox 4 и выше имеет js-ctypes (см. https://developer.mozilla.org/en/js-ctypes для обзора и https://developer.mozilla.org/en/js-ctypes/Using_js-ctypes для примера). Это позволяет загружать DLL и легко вызывать экспортированную встроенную функцию. Если вам действительно нужно использовать эту DLL в качестве плагина NPAPI, все усложняется, потому что вам нужно окно для загрузки плагина, а Firefox, в отличие от Chrome, не имеет специального фонового окна для этого. Но я предполагаю, что вы превратили свою DLL в плагин, чтобы иметь возможность использовать ее в Chrome.
О том, как найти свою DLL для использования с ctypes.open(), смотрите мой ответ здесь: Ссылка бинарного компонента на js-ctypes
Да, вы можете использовать Firebreath DLL в качестве расширения Firefox. Вы можете использовать тот же самый javascript с некоторыми модификациями для Firefox, а для HTML вы должны использовать XUL. Вы должны загрузить скрипт в XUL, который перекрывает по умолчанию browser.xul
overlay chrome://browser/content/browser.xul chrome://Yourproject/content/Youroverlay.xul
Внутри Youroverlay.xul, вы можете добавить строку ниже, чтобы вставить DLL Firebreath
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/"?>
<overlay id="myOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml">
<script type="application/javascript" src="chrome://Yourproject/content/background.js"/>
<vbox style="height:0;">
<html:embed type="application/x-myproject" id="myproject1" style="height:0;"/>
</vbox>
</overlay>
Для простой функциональности я также рекомендую js-ctypes. Он прост в использовании и обеспечивает хорошую изоляцию (поскольку скрипты на странице не могут получить доступ к импортированной библиотеке).
Если вам действительно нужен доступ к плагину NPAPI с любой страницы, стандартный подход, по-видимому, заключается в создании расширения и изменении DOM каждой страницы для включения плагина: