C++跨浏览器扩展开发

14

我开始着手开发一个浏览器扩展程序,由于其性质,我需要用C++来开发。我目前正在使用Firefox,但希望我的代码可以跨浏览器移植。首先,是否有库或接口(例如NPAPI)可以用于确保扩展的跨浏览器移植性?我需要担心哪些问题?

我不使用XPCOM,而是用C++编写功能,这样我就可以为每个平台编译库,并将其捆绑到每个浏览器的扩展中。对于Firefox,我使用XUL来开发我的扩展程序的JS包装器,并且IDL文件会为我生成c++接口。我能做得更好吗?我只想确保没有走错路。

编辑:请还建议是否有更好的论坛适合此类问题。

2个回答

4
我的背景:几年前,我曾经参与开发过一个跨平台、跨浏览器的NPAPI插件,使用OpenGL进行图像渲染。自那时以来,我一直关注这个领域,但现在已不再从事相关工作。我曾为Firefox编写过非插件扩展,但没有为Safari或Chrome编写过。
很大程度上取决于您希望扩展程序做什么,以及您想要呈现什么样的用户界面。不同的浏览器对扩展程序可以和不可以做的事情有不同的想法。
如果您只想以自定义格式显示图像或视频,则NPAPI可能是您最好的选择。 NPAPI基本上是本地平台API周围的薄包装器。因此,跨平台NPAPI代码必须处理各个平台的怪癖,以及来自浏览器对NPAPI支持的不同级别。 Google有一个名为Pepper的项目,用于解决NPAPI的一些问题,但除Chrome外,Pepper还没有得到任何浏览器的支持。
Google的Native Client项目提供了一种替代NPAPI运行本地代码的方法,但它对本地代码施加了限制。例如,允许使用pthreads,但不允许网络访问。有一个名为c_salt的NaCL子项目,似乎可以解决您所寻求的HTML / JS UI +本地代码集成的问题。不幸的是,它仍处于设计阶段,因此对于编写扩展程序并不是非常有帮助。

我的理解是,目前不可行实现一个跨浏览器的扩展程序,该程序可以与浏览器UI集成,并且还可以与本地代码集成。Safari和Chrome限制扩展程序比Firefox更多,只允许使用JavaScript编写扩展程序。我不知道在Safari或Chrome中是否可能有扩展程序与使用NPAPI编写的浏览器插件进行交互。我猜想这要么是不可能的,要么非常麻烦。

总体而言,如果您仔细限制要针对哪些浏览器和平台,您会发现生活要轻松得多。选择哪些浏览器和平台完全取决于您自己。


1
那么没有类似于FireBreath框架的编写浏览器扩展的替代方案吗? - Robert S. Barnes
1
说到FireBreath,我刚刚在开发者网站上看到了一篇很棒的文章,浏览器插件与扩展的区别。诚然,我一直对这两者之间的区别感到困惑。(这很遗憾,因为实际上我被要求实现的是一个扩展!) - Courtney Christensen

3

很少人知道,但是你可以使用Qt编写跨浏览器插件。:-)

你可以使用QtBrowserPlugin来实现。

QtBrowserPlugin解决方案使编写可在Mozilla FireFox、Safari、Opera、Google Chrome、QtWebKit和任何支持“Netscape插件API”(NPAPI)的Web浏览器中使用的浏览器插件变得容易。

QtBrowserPlugin是Qt Solutions软件包的一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接