浏览器-05 HTML和CSS解析1
- 一个浏览器内核几个主要部分,
HTML/CSS解析器,网络处理,JavaScript引擎,2D/3D图形引擎,多媒体支持等;
HTML 解析和 DOM
网页基本结构
- 一个网页(
Page),每个Page都有一个主框(Main Frame),该框通常包含一个HTML Document, 主框也可能包含子框(sub frame); - 这些框构成一个树型结构,以主框为根节点,每个框也可能包含自己的
HTML Document,它是一颗DOM树; WebKit相对应的类,和网页的结构一一对应;

WebKit设计模式
- 以类
Chrome为例,需要实现:- 具备有获取各个平台资源的能力;
- 把 WebKit 的状态和进度等信息分发给
WebKit的使用者;
WebKit通过Chrome的接口来完成后使用ChromeClient抽象类来实现;- 每个
port实现类ChromeClient,一方面监听WebKit状态,一方面返回WebKit所需要的资源和信息; WebKit直接调用Chrome的接口,Chrome调用ChromeClient的接口,而ChromeClient的实现由各个移植来完成;WebKit中很多都是该模式的类组合:Frame和FrameLoader:Frame是页面框和框的加载器;一个负责页面的表示,一个负责加载需要的接口及实现;Document和DocumentLoader;CachedImage和ImageLoader;WebView和Page:Page是WebKit 内部表示网页的类,WebView是WebKit对外表示网页的类,Page只有一个实现,WebView`在不同的移植中有不同的实现;
- 类
Chrome是一个非常重要的类,是WebKit与它的使用者之间的桥梁,主要功能:- 跟
UI和渲染显示相关的需要移植实现的接口集合类; - 继承自
HostWindow(宿主窗口),其包含一系列接口,用来通知重绘或者更新相应整个窗口,滚动窗口等; - 窗口相关操作,例如显示,隐藏等;
- 显示/隐藏窗口中的
toolbar,statusbar,scroolbar等; - 显示
JavaScript相关的窗口,例如JavaScript的Alert,confirm, prompt窗口等;
- 跟
HTML解析的一般过程

DOM 标准
- 定义的是一组平台无关和语言无关的接口,该接口允许编程语言动态访问和更改结构化文档;
DOM level 1
Core:一 组底层的接口,其接口可以表示任何结构化的文档,同时也允许对其进行扩展,典型的例子是支持XML文档;HTML:一组基于Core定义的上层接口,主要是为了方便HTML文档的访问;
DOM level 2
Core:对DOM level1中core部分的扩展,如getElementById;还有很多跟名空间(namespace)相关的接口;Views:允许动态访问和修改文档内容的表示,主要是两个接口AbstractView和DocumentView;Events:主要有EventTarget,Mouse events等接口,但不支持Keyboard;Style:加入接口可以修改样式属性;Traversal and range:遍历树加上对制定范围的文档修改删除等操作;HTML: 扩充DOM level1的HTML部分,允许动态访问和修改HTML文档;
DOM level 3
Core:加入了新的adoptNode和textContent支持;Load and save:动态加载和序列化DOM表示;Validation:根据scheme验证文档的有效性;Events:主要扩展对keyboard,Touch的支持XPath: 使用XPath1.0来访问DOM树;是一种简单直观的检索DOM树节点的方式;
WebKit的CSS实现
解析器
- 解析器对上层的接口是
CSSParser,所有任务均有其处理; - 调用
CSSParser的createStyleRule函数,将选择器和属性列表处理生成StyleRule类型对象; - 可能调用情况:
- 当
DOM建立好之后在创建RenderObject的时候会调用CSSParser; JS代码被执行时,JavaScript引擎会间接调用CSSParser为元素的 属性style解析;
- 当
- 实际上
WebKit会为每个网页设置一个缺省的样式,不同的的移植(port)会有不同的缺省样式;
内部表示
被解析后的
CSS样式就是一组样式规则,每一个规则包含一组选择器和一组样式属性;

- 样式规则是一种基本的样式类型,
CSS的标准包含了多种规则类型:Style:这个是基本类型,一般大多数规则属于这个类型;Import:是WebKit中为方便引入的,其对应的是一个导入CSS文件的Style元素;Media: 对应于CSS标准中的@media类型;Fontface:CSS3新引入的自定义字体的规则类型;Page:对于CSS标准中的@page类型;Keyframes:WebKit的@-webkit-key-frames类型,用来指定特定帧的样式属性信息;Region:对CSS标准正在进行中的Regions的支持,方便开发者对页面进行分区域来排版;

StyleRuleImport类,这个一个伪类型,CSS中并没有该类型的定义,是WebKit处理CSS文件方便引入的;- 该类需要两个类来辅助完成
StyleSheetContents类,就是 CSS 文件中各个规则的处理和内部表示,这些规则被称为子规则,构成一个列表;CSSStyleSheet,该类是个包装类,代表CSS文件包,浏览器-05 HTML和CSS解析1的更多相关文章
- 浏览器-06 HTML和CSS解析2
选择器 其实现由CSSSelector类来完成: CSSSelector的作用是储存从解析器生成的结果信息; 这里匹配指的是当需要为每个DOM中的节点计算样式时,WebKit需要根据当前的节点信息来从 ...
- IE浏览器没有加载CSS或js文件的秘密及解决办法
其实是两处资料拼成这一篇博文的,因为在开发过程中遇到,有的文章只是说明原因,而没有给出解决方案,所以再次给出解释和解决方法,以供参考,如果有好的解决方法,也请分享下! ---------------- ...
- CSS Houdini:用浏览器引擎实现高级CSS效果
vivo 互联网前端团队-Wei Xing Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织 ...
- IE浏览器各版本的CSS Hack
IE浏览器各版本的CSS Hack 如下示例: .test{ color:black;/*W3C*/ color:red\9;/* IE6-IE10 */ _color:black;/*IE6*/ ...
- 判断浏览器是否支持某个css属性
方法:直接判断浏览器是否支持某个CSS属性才是王道,document.documentElement.style 如:判断是否支持 transform if( 'MozTransform' in do ...
- 最全的CSS浏览器兼容问题【CSS技巧 】
CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml格 ...
- 在不同的浏览器使用不同的css样式,解决浏览器兼容问题
区别IE6与FF: background:orange; *background:blue; 区别IE6与IE7: background:green !import ...
- 如何让不同浏览器调用不同的CSS样式
如何让不同浏览器调用不同的CSS样式 由 于对W3C标准支持程度的不同,往往导致同一个CSS样式表在各种Web浏览器中的呈现大相径庭.以目前市场占有率最高的两个浏览器Microsoft Interne ...
- 网站怎么布局能解决不同浏览器对CSS解析的差异,使用css reset
很多地方都提到过CSS Reset这个概念,而且细心的朋友会发现,许多大网站的CSS文件中也含有CSS Reset内容. CSS Reset是什么? 在HTML标签在浏览器里有默认的样式,例如 p 标 ...
随机推荐
- 服务器IIS同时支持ASP和PHP
有一台在用的服务器,系统环境是windows2008R2,上面运行了个app后台程序,现在需要放点PHP代码,需要和java同时使用. 实现方法: 1.安装phpmanger for iis,按照教程 ...
- <<< java异常The import java.util cannot be resolved
异常:The import java.util cannot be resolved 原因:这是由于你的项目buildpath不对 解决方案:右键项目-------buildpath--------最 ...
- Win7如何删除需要管理员权限才能删除的文件夹
在Windows 7系统运行中.往往会遇到想要删除某个文件夹时,系统提示:文件夹访问被拒绝 你需要权限来执行此操作,如何才能删除此类文件夹呢? ------------------ --------- ...
- 精简高效的css命名准则
对于css,为了避免样式冲突,我们总会赋予相当特殊的命名,或是在选择符上添加html标记,或是使用层级.我们为避免在冲突上做文章,就会把代码的命名变得复杂化. 如果css的重用性越高,相比就越高效.如 ...
- centos 7.0 nginx 1.7.9成功安装过程
centos 7.0根目录 的目录构成 [root@localhost /]# lsbin dev home lib64 mnt proc run srv tmp varboot etc lib me ...
- OC中的extern,static,const
const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 被const修饰的变量是只读的. static的作用: 修饰局部变量: 1.延长局部变量的生命周期,程序结束才会 ...
- Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)
PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式.PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...
- PHP变量入门教程(4)PHP 的外部变量
PHP 的外部变量 HTML 表单(GET 和 POST) 当一个表单体交给 PHP 脚本时,表单中的信息会自动在脚本中可用.有很多方法访问此信息,例如: 一个简单的 HTML 表单 <form ...
- JVM参数OmitStackTraceInFastThrow:不打印NullPointerException异常堆栈
查看线上日志,遇到一个诡异的问题,就是系统大量空指针的异常,但是没有打印堆栈,导致不方便定位问题. 经过一番代码调试,确定并非程序代码问题.没有线索之后,从Google找到了答案:是因为在server ...
- iOS界面跳转的一些优化方案
原文地址: http://blog.startry.com/2016/02/14/Think-Of-UIViewController-Switch/ iOS界面跳转的一些优化方案 App应用程序开发, ...
- 浏览器-06 HTML和CSS解析2