2010-09-17 3 views
13

Я начинаю работать над расширением браузера, и из-за характера расширения мне нужно его развить на C++. В настоящее время я работаю с Firefox, но хочу, чтобы мой код был переносимым в разных браузерах. Прежде всего, есть библиотека или интерфейс (например, NPAPI), который я могу использовать для обеспечения этого для расширений? О чем мне нужно беспокоиться?Расширение кросс-браузера в C++

Я не использую XPCOM и вместо этого пишу функциональность на C++, поэтому могу просто скомпилировать библиотеку для каждой платформы и связать ее с расширением для каждого браузера. Для Firefox я использую XUL для разработки JS-оболочки для моего расширения, а файл IDL создает для меня интерфейс C++. Могу ли я сделать что-то лучше? Я просто хочу, чтобы я не пошел по неправильному пути.

РЕДАКТИРОВАТЬ: Пожалуйста, также посоветуйте, есть ли лучший форум для этого типа вопросов.

+1

Правый форум. Хороший вопрос. – sje397

+0

Но ответа пока нет! – user220201

ответ

4

Мой фон: несколько лет назад я работал над кроссплатформенным кросс-браузерным плагином NPAPI, который использовал OpenGL для рендеринга изображений. С тех пор я уделял некоторое внимание пространству, но сейчас это не то, что я делаю. Я написал расширения без плагинов для Firefox, но не Safari или Chrome.


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

Если вам просто нужно отображать изображения или видео в произвольном формате, NPAPI, вероятно, лучший выбор. NPAPI является в основном тонкой оболочкой вокруг API-интерфейсов на собственной платформе. Таким образом, кросс-платформенный код NPAPI должен иметь дело с индивидуальными причудами платформы, а также с различными уровнями поддержки NPAPI от браузеров. У Google есть проект под названием Pepper для исправления некоторых проблем NPAPI, но у Pepper пока нет поддержки ни от какого браузера, кроме Chrome.

Проект корпоративного клиента Google предоставляет альтернативу NPAPI для запуска собственного кода, но он налагает ограничения на собственный код. Например, pthreads разрешены, но доступ к сети - нет. Существует подпроект NaCL под названием c_salt, который, как представляется, относится к типу встроенной интеграции кода HTML/JS UI +, которую вы ищете. К сожалению, он все еще находится в стадии разработки и, следовательно, не очень полезен для написания расширений сегодня.

Мое понимание заключается в том, что на данный момент расширение между браузерами, которое интегрируется с пользовательским интерфейсом браузера, а также интегрируется с собственным кодом, не представляется возможным. Safari и Chrome ограничивают расширения гораздо больше, чем Firefox, и позволяют только расширения, написанные на JavaScript. Я не знаю, возможно ли расширение в Safari или Chrome взаимодействовать с плагином браузера, написанным в NPAPI. Я предполагаю, что это либо невозможно, либо невероятно болезненно.

В целом вы найдете жизнь намного проще, если вы тщательно ограничите, какие браузеры и платформы нацелены. Именно то, какие браузеры и платформы выбрать - это то, что только вы можете решить.

+0

Итак, нет рамки FireBreath для написания расширений браузера? –

+1

Говоря о FireBreath, я просто наткнулся на отличный пост на сайте разработчика, [Браузерные плагины и расширения: разница] (http://colonelpanic.net/2010/08/browser-plugins-vs-extensions-the-difference /). По общему признанию, я был смущен различием между ними. (Какой позор, потому что то, что я на самом деле просят реализовать, - это расширения!) –

3

Немногие знают об этом, но да, вы можете писать кросс-браузерные плагины с помощью Qt. :-)

Вы можете использовать только QtBrowserPlugin.

Решение QtBrowserPlugin делает его легко писать плагины браузера, которые могут быть использованы в Mozilla FireFox, Safari, Opera, Google Chrome, QtWebKit и любой другой веб-браузер, который поддерживает "Netscape Plugin API" , NPAPI.

QtBrowserPlugin является частью пакетов Qt Solutions.

Смежные вопросы