C++ 如何编写浏览器插件?

C++ 如何编写浏览器插件?,c++,npapi,browser-plugin,C++,Npapi,Browser Plugin,我很好奇为Chrome、Safari和Opera等浏览器编写浏览器插件的过程。我在想Windows的具体内容,希望使用C++。 是否有任何工具或教程详细介绍该过程 注意:我指的不是扩展或“插件”。我指的是一个插件,类似于Flash和AdobeReader如何使用插件来处理特定的内容类型 基于Netscape的浏览器、Chrome、Safari和Opera等浏览器使用NPAPI插件系统,您可以学习如何在中编写NPAPI插件,如果您知道Qt,那么他们有一些类可以使浏览器插件的实现更容易,正如其他人指

我很好奇为Chrome、Safari和Opera等浏览器编写浏览器插件的过程。我在想Windows的具体内容,希望使用C++。 是否有任何工具或教程详细介绍该过程

注意:我指的不是扩展或“插件”。我指的是一个插件,类似于Flash和AdobeReader如何使用插件来处理特定的内容类型


基于Netscape的浏览器、Chrome、Safari和Opera等浏览器使用NPAPI插件系统,您可以学习如何在中编写NPAPI插件,如果您知道Qt,那么他们有一些类可以使浏览器插件的实现更容易,正如其他人指出的,这些浏览器的插件是使用Qt编写的

注意:Firefox和Chrome都会默认使用大多数插件,Chrome也会这样做。目前不鼓励新项目的NPAPI

用于开始使用NPAPI的资源:

  • -NPAPI插件的“Hello World”
  • -规范NPAPI标头的源
  • -用于查找特定的NPAPI用例
然而,NPAPI本身的级别相对较低,但有一些工具和框架可以帮助您:

  • -插件的跨浏览器、跨平台框架
  • -为NPAPI插件生成粘合代码
  • -应用程序框架还提供插件支持
  • -基于Qt的浏览器插件框架

我调查了Georg列出的一些框架,以下是我得到的:

  • 火气。我想这几乎是最好的了。您可以在几天内使用FireBreath创建跨平台浏览器插件。我确实发现了一些缺点:它在Windows上不支持utf-8字符。例如:如果文件名中包含中文字符,则无法读取该文件的内容。我相信boost/locale可以解决这个问题。但是FireBreath不包含boost/locale。是的,您可以使用外部boost,但我花了几天时间进行配置和调整,仍然无法在Windows上编译它。作者使用cmake组织代码和子项目。他创建了很多bat或shell脚本和cmake宏,很难理解和配置。简言之,如果您想要FireBreath目前没有提供的功能,那么您的运气会很差,很难添加新功能

  • 尼克西萨。我不认为它正在积极发展。文件很差。从wiki页面的评论中,我们可以知道用户根本无法获得帮助,并且在Windows上运行时遇到困难

  • 朱斯。它不是专门用来创建浏览器插件的。它不支持Linux。作者认为NPAPI即将消亡,因此他没有支持Linux或添加新功能的计划

  • QtBrowserPlugin。在Qt4.5之后的文档中找不到它。换句话说,它没有被维护(并从Qt5.0中删除)

  • 我会在找到更多答案后更新此答案


    更新:Chrome已放弃NPAPI支持。我认为在未来,在C++中编写插件变得越来越困难,因为缺少浏览器的支持。

    一个类似Flash和Adobe Reader有插件来处理特定内容类型的插件。“对NPAPI进行一系列修改,以使插件更具可移植性和安全性”,这是推荐的替代品。我现在想在PPAPI的背景下重新探讨这个问题。IIRC Firefox尚未决定支持PPAPI,而是与插件供应商合作,对NPAPI和插件软件进行类似或相同的安全性修改。”npsimple“”的链接似乎不正确。这是正确的链接吗?@RobW是的,另一个链接完全不相关。它似乎是一个关于智能手机应用程序的网站,名为“摄像头网络”“。对于这些框架,您能否对其功能和简单性进行评论?对于复杂的浏览器插件,你推荐哪一个?@Tyler:这取决于你的要求。一般来说,我只考虑火呼吸或者用普通的NAPI自己写。如果您没有浏览器插件知识,特别是对于跨平台项目,并且还支持来自同一代码库的IE,那么您很可能希望使用Firebreath来避免所需的时间投资。但是,如果插件是项目的重要组成部分,并且您需要细粒度的控制(例如游戏引擎插件),您可能需要自己直接编写一个插件。@GeorgFritzsche感谢您的友好回复。实际上,我已经用Firebreath构建了插件:。但是我遇到了一些汉字编码问题,这需要boost/locale,而FireSpreath没有。firebreath的作者最近没有计划支持i18n。所以我将在下面创建一个答案,列出我的一些资源结果。