如何在Firefox中为所有页面元素实现内容转换器?

Ger*_*ald 6 firefox xpcom mime-filter

我正在尝试将Internet Explorer插件移植到Firefox,但我不确定在哪里寻找我需要的东西.

基本上我需要能够使用某个Content-Type标头过滤浏览器收到的所有内容.我尝试实现流转换器,这是有效的,但仅适用于页面,框架或iframe中的顶级文档.我遇到了与IE相同的问题,并且绕过它真的很hacky,因为我理想这样做是跨平台的,我真的希望能够在Firefox中做到这一点而不诉诸vtable hacks.

内容以专有压缩格式压缩.因此,我需要接收数据,对其进行解压缩,然后将Content-Type更改回原始未压缩文件应具有的内容.

如果有一种方法可以过滤所有收到的数据,那可能是可以接受的,我可以自己处理解析标题.

谢谢

Ger*_*ald 3

我想我可能已经找到了我需要的东西。我发现了这个用于跟踪 HTTP 调用的链接:http://blues.ath.cx/firekeeper/resources/http_tracer.html

由于某种原因,JavaScript 实现似乎存在一些问题,我不是 JavaScript 专家,无法解决这个问题,但我已经用 C++ 实现了它,初步结果表明我应该能够根据我的需要修改它。

基本上,我们用我们自己的实现替换 nsIHttpProtocolHandler 服务,它保留了对初始实现的引用。当调用服务时,我们只是将其代理到保存的原始实现。然后我们提供我们自己的 nsIHttpChannel 和 nsIStreamListener 实现,我们也将它们用作代理。

我们再次将大部分调用代理回原始处理程序。但在 OnDataAvailable 中,我们没有将数据传递给底层 nsIStreamListener,而是使用 nsIStorageStream 保存数据。然后在 OnStopRequest 中,获取所有数据后,我们可以将其解压缩,然后在原始处理程序上调用 OnDataAvailable,然后调用 OnStopRequest。

到目前为止,它已经进行了一些小型的简单测试,但我必须对其进行一些更严格的测试……我还必须弄清楚是否可以使用 HTTPS 做同样的事情。

目前我看到的最大问题是它依赖于一些未冻结的接口,例如nsIHttpChannelInternal。但据我所知,我没办法,而且我的版本兼容性要求非常小,所以如果有必要的话我可以忍受。

与此同时,如果有人有任何其他建议,我会洗耳恭听:D