【发布时间】:2023-03-24 00:18:01
【问题描述】:
我想知道是否可以查看输入流内部 在 Firefox 中使用“chrome://”协议时。让我更 清除。我们以下面的调用顺序为例:
- nsXULDocument.cpp 有一个 nsXULDocument::ResumeWalk() 方法。
- 它调用 LoadScript() [在 line:3004 附近]。
- LoadScript() 调用 NS_NewStreamLoader [nsXULDocument.cpp,行 3440]。
- NS_NewStreamLoader 调用 NS_NewChannel() [nsNetUtil.h, line:593]。
- NS_NewChannel() 然后调用 ioservice->NewChannelFromURI() [nsNetUtil.h,行:226]。
- NewChannelFromURI() 调用 NewChannelFromURIWithProxyFlags() [nsIOService.cpp 行:596]。
- NewChannelFromURIWithProxyFlags() 调用 handler->newChannel() 在运行时被解析为 nsChromeProtocolHandler->newChannel() [nsChromeProtocolHandler.cpp,第 182 行]。
- 这又会调用 ioServ->NewChannelFromURI() [nsChromeProtocolHandler.cpp,行:196]。
- 重复第 6 步。
- 重复第 7 步,但是,在不同的时间,它可以加载 基于协议的不同处理程序(chrome、jar、文件等)
我描述上述调用序列的目的是设置 我的问题的上下文。我想知道“chrome://”协议是什么时候 用过,用的时候想处理输入流。为了 例如,如果 Firefox 正在加载像“chrome://package/content/”这样的脚本 script.js" 我想在从 磁盘。拦截文件后,我可能会更改它的内容,或者 将文件的内容转储到我选择的文件夹中。
因此,每当 Firefox 读取文件时(使用 fread() 之类的方法, 可能,我也想知道),我想确定读取请求是否来自 chrome 协议,此时我可以根据需要对文件进行一些更改。对此有何帮助?
【问题讨论】:
-
我认为唯一的方法是替换
chrome://协议处理程序——但这很快就会变得一团糟。出于性能原因,chrome://协议不再为您提供“窥探内部”的方式。 -
嗯,我明白了。我假设 Necko 的通用接口是丢失具体协议信息的地方。