我开始研究浏览器扩展,由于扩展的性质,我需要用C ++开发它。我目前正在使用Firefox,但希望我的代码可以跨浏览器移植。首先是有一个库或一个接口(如NPAPI),我可以使用它来确保这个扩展?我需要担心的是什么?
我没有使用XPCOM,而是在C ++中编写功能,以便我可以为每个平台编译库,并可以将其与每个浏览器的扩展名捆绑在一起。对于Firefox,我使用XUL为我的扩展开发JS包装器,IDL文件为我生成c ++接口。我能做得更好吗?我只是想确保自己不会走错路。
编辑:还请建议是否有更好的论坛来处理此类问题。
答案 0 :(得分:4)
我的背景:几年前,我在一个跨平台的跨浏览器NPAPI插件上工作,该插件使用OpenGL进行图像渲染。从那以后,我对空间给予了一些关注,但这不是我现在所做的。我为Firefox编写了非插件扩展,但没有编写Safari或Chrome。
很大程度上取决于您希望扩展程序要做什么,以及您想要呈现的用户界面类型。不同的浏览器对扩展可能做什么和不做什么都有不同的想法。
如果您只是想以自定义格式显示图片或视频,NPAPI可能是您最好的选择。 NPAPI基本上是本机平台API的薄包装器。因此,跨平台NPAPI代码必须处理各个平台的怪癖,以及来自浏览器的NPAPI的不同级别的支持。 Google有一个名为Pepper的项目来解决NPAPI的一些问题,但除了Chrome之外,Pepper还没有得到任何浏览器的支持。
Google的Native Client项目为运行本机代码提供了NPAPI的替代方案,但它对本机代码施加了限制。例如,允许使用pthread,但不允许网络访问。有一个名为c_salt的NaCL子项目,它似乎解决了您寻求的HTML / JS UI +本机代码集成。不幸的是,它仍处于设计阶段,因此对于今天编写扩展程序并不十分有用。
我的理解是,目前,跨浏览器扩展与浏览器UI集成并且还与本机代码集成是不可行的。 Safari和Chrome都比Firefox更加限制扩展,并且只允许使用JavaScript编写的扩展。我不知道是否可以在Safari中使用扩展程序或Chrome与使用NPAPI编写的浏览器插件进行交互。我猜这不可能或者令人难以置信的痛苦。
总的来说,如果您仔细限制要定位的浏览器和平台,您会发现生活更加轻松。确切地说,选择哪些浏览器和平台只能由您决定。
答案 1 :(得分:3)
没有多少人知道它,但是,您可以使用Qt编写跨浏览器插件。 : - )
您可以使用QtBrowserPlugin。
QtBrowserPlugin解决方案实现了它 易于编写浏览器插件即可 用于Mozilla FireFox,Safari, Opera,Google Chrome,QtWebKit等等 支持的其他网络浏览器 “Netscape Plugin API”,NPAPI。
QtBrowserPlugin是Qt Solutions个软件包的一部分。