Использование плагина, созданного с помощью 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 каждой страницы для включения плагина:

Сценарий NPAPI с плагинами не работает с Firefox

Другие вопросы по тегам