在浏览器扩展中编译C ++代码

时间:2013-10-21 16:05:14

标签: c++ firefox firefox-addon npapi firebreath

我正在使用Firefox中的浏览器扩展来拦截HTTP请求并更改它们。由于我的项目的目的,我需要合并一个用C ++构建的项目来处理这些信息。重写C ++项目需要花费太多工作(这是一个很大的项目)。我读到我可以将C ++代码转换为.dll文件并使用它,但我不确定如何做到这一点(对编程扩展有点新的。做了很多网络开发)。

我一直在做很多研究,NPAPI似乎是要走的路(我知道它正在逐步淘汰,但项目只是我需要工作的概念证明)。但是,我不确定像FireBreath这样的框架是否可以进行扩展。它也需要在Firefox中,因为我的公司不使用任何其他东西。

是否有一种在扩展中访问C ++代码的好方法?如果有的话,我会喜欢一些教程链接。我确实读过this previous thread,但它没有给出使用什么的可靠结论。此外,如果有更好/更简单的方法(插件等),我很想知道!

很抱歉,如果这是在错误的论坛。还是新来的:S

2 个答案:

答案 0 :(得分:1)

我同意这些意见,你应该在使用这个之前绝对检查所有其他可能性。我可能会考虑编写自己的代理服务器(类似于Charles的工作原理),当它运行时它会做你想做的任何事情。

FireBreath可用于创建插件,仅用于创建插件。 然而,您可以在扩展程序中使用插件,至少目前(您已经知道计划的逐步淘汰)。因此,如果您可以使用扩展程序捕获数据(我不知道扩展名,所以我不确定您是否可以),那么您可以使用javascript扩展将其传递到插件实例中以进行处理你想做什么。

经验法则: 如果可以以插件以外的任何其他方式完成,don't use a plugin

答案 1 :(得分:1)

@taxilian说得对:

  

如果可以以插件之外的任何其他方式完成,请不要使用插件。

编写实际的Firefox扩展更合适。这些天你建议使用js-ctypes与二进制blob(DLL,所以,dylib)接口。你会做什么:

  • 在Javascript中编写大部分加载项,因为这是通常的方式,因为它是最简单的方法。有一些方法可以拦截,修改和跟踪http请求/响应,例如http observers有点是一个切入点。查看操作HTTP请求的MDN和其他代码(其他附加组件),以查看不同的部分(观察者,nsIHttpChannelnsITracableChannel
  • 为现有库创建一个仅限C的API,包装您需要为附加组件访问的C ++ API。一般经验法则:保持简单。
  • js-ctypes绑定编译为仅限C的API,以便您可以从Javascript使用它并在其他扩展代码中使用这些绑定。