【问题标题】:Peeking inside the chrome protocol in Firefox浏览 Firefox 中的 chrome 协议
【发布时间】:2023-03-24 00:18:01
【问题描述】:

我想知道是否可以查看输入流内部 在 Firefox 中使用“chrome://”协议时。让我更 清除。我们以下面的调用顺序为例:

  1. nsXULDocument.cpp 有一个 nsXULDocument::ResumeWalk() 方法。
  2. 它调用 LoadScript() [在 line:3004 附近]。
  3. Lo​​adScript() 调用 NS_NewStreamLoader [nsXULDocument.cpp,行 3440]。
  4. NS_NewStreamLoader 调用 NS_NewChannel() [nsNetUtil.h, line:593]。
  5. NS_NewChannel() 然后调用 ioservice->NewChannelFromURI() [nsNetUtil.h,行:226]。
  6. NewChannelFromURI() 调用 NewChannelFromURIWithProxyFlags() [nsIOService.cpp 行:596]。
  7. NewChannelFromURIWithProxyFlags() 调用 handler->newChannel() 在运行时被解析为 nsChromeProtocolHandler->newChannel() [nsChromeProtocolHandler.cpp,第 182 行]。
  8. 这又会调用 ioServ->NewChannelFromURI() [nsChromeProtocolHandler.cpp,行:196]。
  9. 重复第 6 步。
  10. 重复第 7 步,但是,在不同的时间,它可以加载 基于协议的不同处理程序(chrome、jar、文件等)

我描述上述调用序列的目的是设置 我的问题的上下文。我想知道“chrome://”协议是什么时候 用过,用的时候想处理输入流。为了 例如,如果 Firefox 正在加载像“chrome://package/content/”这样的脚本 script.js" 我想在从 磁盘。拦截文件后,我可能会更改它的内容,或者 将文件的内容转储到我选择的文件夹中。

因此,每当 Firefox 读取文件时(使用 fread() 之类的方法, 可能,我也想知道),我想确定读取请求是否来自 chrome 协议,此时我可以根据需要对文件进行一些更改。对此有何帮助?

【问题讨论】:

  • 我认为唯一的方法是替换 chrome:// 协议处理程序——但这很快就会变得一团糟。出于性能原因,chrome:// 协议不再为您提供“窥探内部”的方式。
  • 嗯,我明白了。我假设 Necko 的通用接口是丢失具体协议信息的地方。

标签: firefox protocols gecko


【解决方案1】:

对于那些偶然发现这里对“chrome”协议感到好奇的人,这里有一些参考资料可能会很方便: - Chrome Protocol, part of SPDY - Lets make the web faster project

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2021-04-23
    • 2017-10-10
    • 2014-02-14
    • 2016-04-27
    • 2013-11-19
    相关资源
    最近更新 更多