URI 加载器服务

顾名思义,URI 加载器服务负责加载 URI,但也负责决定如何处理这些内容,是在 DOM 窗口中显示还是将其传递给其他内容。

通常在加载内容以供用户显示时使用,通常来自 nsDocShell 以网页形式显示或 nsObjectLoadingContent 以网页的 <object> 标签内显示。正常的入口点是通过 nsIURILoader::OpenURI

URI 加载器启动加载并注册 nsDocumentOpenInfo 作为内容的流监听器。一旦收到标头,DispatchContent 然后决定如何处理内容,因为它可能需要由调用者以外的其他内容处理。它使用一些标准来决定这一点,包括

  • Content-Type 标头。

  • Content-Disposition 标头。

  • 加载标志。

此处理的一部分可能包括通过注册的流转换器运行内容以将内容类型从一种转换为另一种。这通过 流转换器服务 完成。发生这种情况时,将创建一个新的 nsDocumentOpenInfo 以与当前内容相同的方式处理新内容。

大致流程如下(但请注意,这可能因传递给加载器服务的标志而异)

  1. 调用者可以提供 nsIURIContentListener,它可以提供处理内容类型或我们可以将原始类型转换为的内容类型。如果是这样,加载将传递给监听器。

  2. 可以将 nsIURIContentListener 的全局实例注册到 URI 加载器服务,因此以相同的方式进行咨询。

  3. 可以将 nsIURIContentListener 的全局实例注册到类别管理器,因此以相同的方式进行咨询。

  4. 可以注册 nsIContentHandler 的全局实例。如果其中一个同意处理内容,则加载将传递给它。

  5. 我们尝试将内容转换为不同的类型。

  6. 加载将传递给 外部辅助应用程序服务

在大多数情况下,该过程在步骤 1 结束,因为 nsDocShell 为首先咨询的 nsIURIContentListener 传递 nsDSURIContentListener,并且它接受大多数 Web 内容类型