【问题标题】:Cross browser extension development in C++C++跨浏览器扩展开发
【发布时间】:2017-03-21 17:45:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ browser cross-browser


    【解决方案1】:

    我的背景:几年前,我开发了一个跨平台、跨浏览器的 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 编写的浏览器插件交互。我猜这要么是不可能的,要么是非常痛苦的。

    总体而言,如果您仔细限制目标浏览器和平台,您会发现生活会轻松很多。究竟要选择哪些浏览器和平台,只有您自己可以决定。

    【讨论】:

    • 那么没有一个 FireBreath 框架等效于编写浏览器扩展?
    • 说到 FireBreath,我刚刚在开发者的网站上看到了一篇很棒的帖子,Browser Plugins vs Extensions: The Difference。诚然,我一直对两者之间的区别感到困惑。 (这很遗憾,因为我实际上被要求实现的是扩展!)
    【解决方案2】:

    知道的不多,但是是的,您可以使用 Qt 编写跨浏览器插件。 :-)

    您可以为此使用QtBrowserPlugin

    QtBrowserPlugin 解决方案使它 易于编写的浏览器插件,可以 可用于 Mozilla FireFox、Safari、 Opera、Google Chrome、QtWebKit 和任何 其他支持的网络浏览器 “网景插件 API”,NPAPI。

    QtBrowserPlugin 是Qt Solutions 包的一部分。

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 2012-05-20
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      相关资源
      最近更新 更多