zoukankan      html  css  js  c++  java
  • Mozilla研究—从输入URL到显示内容的基本过程

    Mozilla研究—从输入URL到显示内容的基本过程

     

    转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

    作者联系方式:Li XianJing <xianjimli at hotmail dot com>

    更新时间:2007-3-16

     

    mozilla是一个以浏览器为中心的软件平台,它在我们平台中占有重要地位。我们用它来实现WEB浏览器、WAP浏览器、邮件系统、电子书和帮助阅读器等应用程序。为此,我最近花了不少时间去阅读mozilla的代码和文档,我将写一系列的BLOG作为笔记,供有需要的朋友参考。本文介绍一下从输入URL到显示内容的基本过程。

     

    按我的想象,从输入URL到显示内容的过程非常简单:连接到服务器下载文件解析内容排版布局。而在Mozilla中,实际情况虽然大体差不多,由于中间绕了不少圈子,整个过程显得比较复杂了。这里简单介绍一下:

     

    1.         修正URL。用户输入的URL可能不合规范,在URLnsDocShell::LoadURI中,mozilla会调用URIFixup对其进行修正。它不但可以进行诸如加上scheme之类的简单修正,还可以到指定的URL上去进行关键字查询,以获取真正的URL

     

    2.         创建URI对象。调用nsIIOService接口的GetProtocolHandler函数,通过scheme查询到URI对应的nsIProtocolHandler,然后调用NS_NewURI创建URI对象。

     

    3.         检查Cache文件。除了像REFRESH之类的操作不允许取cache的情况外,其它情况都先调用nsIDocShellHistory的函数,看看能否从历史记录中获取cache的文件。

     

    4.         创建Channel。在nsDocShell::DoURILoad调用NS_NewChannel创建Channel

     

    5.         设置Cookie等信息,然后调用AsyncOpen打开Channel

     

    6.         转发数据到nsParser。当有数据可用时,会触发nsInputStreamReadyEvent事件,经过nsInputStreamPump等对象的转发,数据最终被送到nsParser

     

    7.         解析数据。nsParser解析数据生成各个元素(Element),解析器的代码在parser/htmlparser/src目录下,它支持增量解析,所以可以在文件传输过程中,边传输边解析,而不必等到传输完成之后才解析。

     

    8.         CNavDTD做语法检查,并做适当的修正。CNavDTD实现了nsIDTD接口。整个解析器的架构是Builder模式的变种,它在Director(即nsParser)和Builder(HTMLContentSink)之间,加了这样一个nsIDTD,以便对错误的语法进行修正。

     

    9.         HTMLContentSink构建nsDocument

     

    10.     nsDocumentPresShell调用nsCSSFrameConstructor去创建各种layout元素。

     

    Layout部分的处理非常复杂,目前还没有弄清楚,以后再介绍吧。

     

    ~~end~~

     

     
  • 相关阅读:
    python---装饰器用法小结
    python---mysql事务
    python---sql语句集体更改数据
    python多继承中的深度优先与广度优先
    python---copy
    vue 主次页面区分
    css 过渡动画
    android web外壳
    cordova 打包 守护进程无法启动
    JavaScript 原生控制元素添加删除
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167746.html
Copyright © 2011-2022 走看看