我正在 Firefox 中开发浏览器扩展程序来拦截 HTTP 请求并更改它们。由于我项目的目的,我需要合并一个内置于C++的项目,以便处理该信息。重写C++项目需要太多的工作(这是一个大项目)。我读到我可以将C++代码制作成.dll文件并使用它,但我不确定如何做到这一点(编程扩展的新手。确实做了很多网络开发)。
我一直在做很多研究,NPAPI 似乎是要走的路(我知道它正在逐步淘汰,但该项目只是我需要工作的概念证明)。但是,我不确定像FireBreath这样的框架是否可以进行扩展。它也需要在Firefox中,因为我的公司不使用其他任何东西。
有没有访问扩展中C++代码的好方法?如果有的话,我希望有一些教程的链接。我确实阅读了之前的线程,但它并没有给出关于使用什么的可靠结论。另外,如果有更好/更简单的方法可以做到这一点(插件等),我很想知道!
抱歉,如果这是在错误的论坛。这里还是新的:S
我同意评论,即在选择这个之前,您应该绝对检查所有其他可能性。 我可能会考虑编写自己的代理服务器(类似于Charles的工作方式),当它运行时,它会做任何你想做的事情。
FireBreath 可用于创建插件,并且只能用于创建插件。 但是,您可以在扩展中使用插件,至少目前是这样(您已经知道计划的逐步淘汰)。 因此,如果您可以使用扩展捕获数据(我不知道扩展,所以我不确定您是否可以),那么您可以使用 javascript 扩展将其传递到插件实例中,以便执行您想要做的处理。
不过,经验法则:如果可以通过插件以外的任何其他方式完成,don't use a plugin
.
@taxilian说得对:
如果可以通过插件以外的任何其他方式完成,请不要使用插件。
编写一个实际的 Firefox 扩展会更合适。现在建议你使用js-ctypes与二进制blob(DLL,所以,dylib)进行交互。你会怎么做:
- 用Javascript编写大部分附加组件,因为这是通常完成的方式,因为它是最简单的方法。有一些方法可以拦截,修改和跟踪http请求/响应,例如http观察者是它的入口点。看看MDN和其他操纵HTTP请求的代码(其他附加组件),看看不同的部分(观察者,
nsIHttpChannel
,nsITracableChannel
- 为现有库创建仅限 C 的 API,包装加载项需要访问的C++ API。一般经验法则:保持简单。
- 将 js-ctypes 绑定组合到该仅限 C 的 API,以便您可以从 Javascript 使用它,并在其他扩展代码中使用这些绑定。