-1

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

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

有没有一种在扩展中访问 C++ 代码的好方法?如果有的话,我会喜欢一些指向教程的链接。我确实阅读了这个先前的线程,但它并没有给出关于使用什么的可靠结论。另外,如果有更好/更简单的方法(插件等),我很想知道!

对不起,如果这是在错误的论坛。这里还是新的:S

4

2 回答 2

1

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

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

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

于 2013-10-21T17:59:09.170 回答
1

@taxilian 说得对:

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

编写一个实际的 Firefox 扩展会更合适。这些天来,建议您使用js-ctypes与二进制 blob(DLL,so,dylib)进行交互。你会做什么:

  • 用 Javascript 编写大部分附加组件,因为这通常是这样做的,因为它是最简单的方法。有一些方法可以拦截、修改和跟踪 http 请求/响应,例如http 观察者是一个入口点。查看 MDN 和其他处理 HTTP 请求的代码(其他附加组件)以了解不同部分(观察者nsIHttpChannelnsITracableChannel
  • 为您现有的库创建一个纯 C API,包装您需要访问的 C++ API 以访问您的附加组件。一般经验法则:保持简单。
  • 将js -ctypes绑定组合到该仅限 C 的 API,以便您可以从 Javascript 中使用它并在您的其他扩展代码中使用这些绑定。
于 2013-10-22T14:33:39.387 回答