2010.4.28 Webkit
1
2
3
4
5
6
| 今天都在看Webkit源码,总结一下:<br>
核心的两部分应该是WebCore和JavascriptCore,大致上来说,WebCore负责HTML和CSS及图片等资源的解 析,JavascriptCore负责Javascript脚本的解析和执行。JavascriptCore还没看,主要是看了WebCore部分。<br>
WebCore既然叫Core,其实就只有很Core的东西,也就是很单纯的解析。至于说如何获取数据,如何把页面显示出来,甚至如何处理与用户之间的交 互等功能就不是它来做的,而是让一些不那么Core的模块来做。而且这些模块都是平台相关的,win下有win下的实现,qt下有qt下的实现,gtk下 有gtk下的实现。又或者说其实Webkit并不是浏览器,而仅仅是一个引擎。<br>
浏览器的一个经典应用场景是用户给出一个URL(直接输入或者点击链接或者JavaScript解析等方式)。然后浏览器外壳调用FrameLoader 来装载页面。FrameLoader首先检查一些条件(policyCheck()),如URL是否非空、URL是否可达,用户是否取消等等。然后通过 DocumentLoader启动一个MainResourceLoader来装载页面。<br>
MainResource调用network模块中的接口来下载页面内容(ResourceHandle),实际上这里的Resourcehandle已 经是平台相关的内容了,比如在Qt里面,会有ResourceHandleQt来控制,然后调用QtNetworkReplyHandler来处理 HTTP请求(GET, POST等)。接收到数据以后,会有回调函数,告诉MainResourceLoader数据已经接收到了。然后一路返回到FrameLoader开始调 用HTMLTokenizer解析HTML文本。解析过程中,如果遇到Javascript脚本的话,也会调用Javascript引擎(Webkit中 的JavascriptCore,chrome中的V8)来解析。数据被解析完了以后,成了一个一个的node。然后通过 FrameLoaderClient调用外部的壳把内容显示出来。
。。。好像什么都没说清楚。。。
|