Расширение кросс-браузера в С++

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

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

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

Ответы

Ответ 1

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


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

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

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

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

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

Ответ 2

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

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

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

QtBrowserPlugin входит в пакет Qt Solutions.