3

我正在做一个我打算为自己做学术练习的项目。我基本上在做的是尝试在 IIS 服务器和 Web 浏览器之间添加自定义压缩类型,但在浏览器方面陷入了困境。基本上需要的是能够在将字节流发送到客户端之前更改服务器上的字节流,并且在客户端浏览器端,能够在其他正常的 DOM 解析等发生之前更改接收到的响应字节流。在服务器端,这被证明是微不足道的,但我不知道如何在 chrome 或 firefox 中做到这一点。如果有人对 chrome 有见解,请分享,但我现在将重点放在 Firefox 上。我的理解是,以前 Firefox 对扩展的访问级别相当低,但他们正在通过他们的 Firefox 附加 sdk 收紧限制。我不想费心学习旧方法,如果它们将被删除,那么是否有人明确知道附加 sdk 是否允许您以这种方式直接更改字节流?如果是这样,你有这种用法的例子吗?

(我知道我需要与 Accept-Encoding 标头协商压缩)

4

1 回答 1

2

如果它们将被删除,我不想费心学习旧方法

现在或将来都没有计划移除旧的附加支持。至少这是附加 SDK 人员和扩展管理人员反复告诉我的。

回到你的问题:附加 sdk 没有为这样的东西提供明确的 API,但你总是可以更底层,即使在 SDK 中(通过chrome模块和/或window/utils)。

要实现其他压缩方法,您需要实现接口并在合同nsIStreamConverter下正确注册您的组件 。@mozilla.org/streamconv;1@?from=<yourcompression>&to=uncompressed然后 Firefox 应该能够解码yourcompression

  • 有关如何在 javascript 或 C++ 中实现和注册 XPCOM 组件的更多信息,请参阅https://developer.mozilla.org/ 。
  • 使用 SDK 或实现您的附加组件无需重新启动将需要您自己注册组件,而不是依赖 chrome.manifest。已经有几个插件可以这样做,例如Adblock Plus
  • 应避免使用二进制 (C++) 组件,因为您显然需要为每个支持的平台编译组件,并且您需要为每个 Gecko 版本重新编译它。如果您必须使用二进制文件,则 javascript 组件存根 + js-ctypes可能会更好。
  • 请参阅 mozilla 源代码,了解如何首先实现nsIStreamConverter

您可能还需要修改network.http.accept-encoding首选项,以便实际与服务器协商压缩。

于 2013-08-13T10:41:56.797 回答