
Webkit
文章平均质量分 70
MyMichael
Michael
展开
-
小菜鸟学浏览器之感悟
十年生死两茫茫,不思量,自难忘。千里孤坟,无处话凄凉。纵使相逢应不识,尘满面,鬓如霜。夜来幽梦忽还乡,小轩窗,正梳妆。相顾无言,唯有泪千行。料得年年断肠处,明月夜,短松岗。 清明节,思念故乡,不免想起了远在千里之外故去的老父亲,想起苏轼的一首《江城子》,借此抒发情感,望网友勿取笑。如今的浏览器,越来越向谷歌看齐了,从安卓起,谷歌就对webkit内原创 2015-04-25 23:02:07 · 1379 阅读 · 0 评论 -
Frame
frame允许我们在多个独立于窗口的视图(view)里表现文档(document),多视图使我们很方便,比如我可以让有些信息可见、其他信息不可见(比如滚动显示)。举例来说,我们可以在同一个窗口内,让一个frame显示静态标签,而让另一个frame显示导航菜单,第三个frame显示能滚动的document,如何滚动却由第二个frame来选择。是不是很有意思?下面给出一个例子: fr原创 2015-03-01 23:24:58 · 904 阅读 · 0 评论 -
WebPage
顾名思义,WebPage就是指网页。这一点也可以从Webkit的WebCore的架构看出来:WebCore->page。在page目录下,实现了一些DOM的全局对象,比如Window,Timer,popup窗口,DOM的选择,焦点的控制、history等等。 总之,与WebView类似,WebPage就是WebCore用来编辑、查看网页内容的对象。WebCore::page:原创 2015-02-28 17:12:42 · 3581 阅读 · 0 评论 -
各种各样的client
我们看webkit代码,到处是client,那么何为client呢? 其实,client(客户端)指的就是对某件事情感兴趣的人(物),对Frame加载感兴趣的人,他可以继承Frame加载器的客户端,通过客户端的一系列接口,他就可以获知Frame加载到什么阶段了。请看FrameLoaderClient的各种各样的事件接口:将要发生型: virtual void dispat原创 2015-03-02 18:09:30 · 1180 阅读 · 0 评论 -
WebView
在Webkit里,WebView是一个既抽象又具体的概念。抽象是因为它是页面(page )的视图/查看;具体是因为它需要呈现(representation),目前Qt和Gtk,Chromium都实现了自己的WebView。举个Qt的例子吧,Qt基于QWidget实现了一个QWebView,它可以用于编辑、观察那些需要窗口事件如focus处理的页面内容之呈现。原创 2015-02-28 16:01:28 · 1184 阅读 · 0 评论 -
Webkit关于HTML 5的Application Cache实现之研究
因为工作关系,研究了一段时间的ApplicationCache。首先介绍一下与它相关的SQL DB Table的几个基本概念,CacheGroups : 就是一组资源,例如html, css, js, image,他们与一个cache的manifest关联,CacheGroups表包含的每个cache项有自己的ID以及相应的manifest的URL。CacheEntries原创 2015-02-24 10:59:54 · 2238 阅读 · 0 评论 -
什么是Chrome和ChromeClient
1 ChromeChrome 常常用于描述用户接口元素(Element),比如alert, confirm, prompt。2 ChromeClientChromeClient是一个抽象接口,ChromeClient功能集中在大家熟知的用户接口(Chrome),比如alert, popup, confirm, window.open等--也就是包含某个WebCore的页面(原创 2015-02-12 17:39:13 · 1807 阅读 · 0 评论 -
Javascript里的EventTarget的规范及应用
"EventTarget is a DOM interface implemented by objects that can receive DOM events and have listeners for them."一个EventTarget是一个可以接受DOM事件且能绑定事件监听器的对象.最常见的EventTarget就是DOM元素对象,另外,还有一些不是DOM元素的对象也能成为转载 2015-02-21 09:16:11 · 3344 阅读 · 0 评论 -
自定义调用
[CustomCall](i)概述: [CustomCall] 允许你为给定接口的call()函数编写自己的绑定函数.用法: [ CustomCall ] interface XXX { };如果你想为了这样的js代码:xxx.call()编写自己的绑定函数,你就可以使用 [CustomCall].JavaScriptC翻译 2015-02-20 23:50:54 · 891 阅读 · 0 评论 -
Webkit IDL中自定义[命名]属性的获取(Getter)以及设置(Setter)函数
自定义命名属性的获取(Getter)以及设置(Setter)函数:[CustomNamedGetter](i), [CustomNamedSetter](i)命名属性的W3C链接如下:The spec of named properties (注意,下面描述的webkit行为和W3C的规范是不同的)总结: [CustomNamedGetter] 或者 [Cus翻译 2015-02-20 16:30:28 · 1110 阅读 · 0 评论 -
Webkit IDL的各种自定义接口
[JSCustomToNativeObject](i), [JSCustomFinalize](i), [CustomIsReachable](i), [JSCustomMarkFunction](i), [JSCustomNamedGetterOnPrototype](i),[JSCustomPushEventHandlerScope](i), [JSCustomDefineOwnPropert翻译 2015-02-21 00:19:20 · 1564 阅读 · 0 评论 -
QtWebkit里RenderLayer树的绘制详细流程分析
QtWebKit从绘制事件(Qt的paint)发出,到WebCore的RenderLayer数的绘制详细流程分析如下。 首先是QWidget收到paintEvent,发送给Qt的QWebView,在QWebView里,创建Qt的画笔QPainter,然后使用此画笔再调用Qt的QWebFrame的渲染函数render把这个QWebFrame绘制到裁剪区里。在QWebFrame的ren原创 2015-03-19 00:04:48 · 1824 阅读 · 0 评论 -
Tiled Backing Store(三)
3.Qt WebKit之QGraphicsWebView 本节叙述如何通过Qt的QGraphicsWebView实现分片底衬仓库(tiled backing store)。如上静态类图所示,只有实现了分片底衬仓库客户端(TiledBackingStoreClient)的接口的WebCore::Frame才拥有分片底衬仓库实例。其他类只能通过WebCore::Fra翻译 2015-03-03 11:31:49 · 1287 阅读 · 0 评论 -
Tiled Backing Store(四)
3.3 分片底衬仓库(TiledBackingStore)的可见区域矩形 如下图所示,WebCore::Frame::tiledBackingStoreVisibleRect最终请求QGraphicsWebView给出可见区域:3.4 使分片底衬仓库无效 如果frame内容所在的矩形变脏了,WebCore::Frame会使这个矩形变成无效区域,同时告诉分片翻译 2015-03-03 12:56:09 · 1309 阅读 · 0 评论 -
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
看到HorkeyChen写的文章《[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现》,写的很好,深受启发。想补充一些Horkey没有写到的细节比如字节码是如何生成的等等,为此成文。 JSC对JavaScript的处理,其实与Webkit对CSS的处理许多地方是类似的,它这么几个部分:(1)词法分析->出来词语(Token)原创 2015-03-26 23:26:13 · 9136 阅读 · 3 评论 -
编译Sanbox
chromium启动总是出现警告提示:[4428:4428:51288848814:WARNING:zygote_host_impl_linux.cc(165)] Running without the SUID sandbox! See http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on. 更新原创 2015-03-14 16:20:54 · 2833 阅读 · 0 评论 -
Tiled Backing Store(一)
1. 概述下列图片从层次的角度解释了什么是Tiled Backing Store:viewport 视图端口:代表用来显示网页内容的区域。Qt里,实际上就是QWidget。Tiled backing store: 可以看作是off-screen的pixmap的缓冲区。为了滚动、缩放操作的平滑,它覆盖的区域总是比viewport要大。 Co翻译 2015-03-03 00:23:21 · 1973 阅读 · 0 评论 -
查看RenderObject树的内部表示
有时候我们需要知道自己写的页面排版的具体细节,DumpRenderTree是个不错工具。它位于WebKit/WebKitBuild/[Debug|Release]/bin目录下,直接运行会出错:gdb ./DumpRenderTree./DumpRenderTree http://192.168.1.100/BoxModeofCSS.html[Thread debugg原创 2015-03-10 07:52:03 · 2964 阅读 · 0 评论 -
Backing Store ( 五 )的创建
不是所有的RenderLayer都需要创建它的Backing Store,只有网页的RenderObject树之RenderLayer满足如下条件:1 Transform:几何变换2 Video:页面有3 Canvas: 页面有4 Plugin5 Frame6 3DTransforms7 Animation8 Filters:CSS过滤器9 Position原创 2015-03-10 11:49:35 · 4021 阅读 · 0 评论 -
Tiled Backing Store (二)
2.2 前缓冲区(Front buffer) 通过QPinter来绘制tile实际上就是要绘制存储在前缓冲区里的pixmap。没有前缓冲区的tile意味着它不需要绘制。2.3 后缓冲区(Backend Buffer) 后缓冲区充当tile内容的屏下(off-screen)后缓冲区并且可以采用Qt的画笔绘制到Qt widget上。在更新后缓冲区的过翻译 2015-03-03 00:56:27 · 1698 阅读 · 0 评论 -
Webkit对Javascipt的执行优先级
原创!转载请注明出自http://blog.youkuaiyun.com/lichwei1983生成DOM Tree的过程中,HTMLTreeBuilder会经常检查看看自己是否已经暂停,以便执行脚本,比如:HTMLTreeBuilder处理token的时候,如果发现有标签--token.name() == scriptTag,就会停下解析token的流程,转而运行这个脚本--通过runScr原创 2013-04-15 22:44:13 · 1587 阅读 · 0 评论 -
词法分析器的工作过程分析
Webkit中,有个词法分析器HTMLTokenizer,她是怎么工作的呢,网页字节流是她的输入,她的输出是一个个的词语Token,比如div,input,img,script等等HTML文件中的标准元素(Element)。原创 2015-03-20 12:57:24 · 2426 阅读 · 0 评论 -
Webkit初始化以及加载URL过程中各种对象的建立时序以及DOM树的建立详情分析
众所周知,Webkit需要创建DOM树。为此它需要创建WebView, Chrome,Page,Frame, Document, Document Parser, DOM Tree Builder(DOM树的建造引擎),ScriptRunner, Resource Handle等等对象。 同时,还需要创建为上面这些对象服务或者与之通信的支持对象,比如:与本地窗口相关的ChromeClient, 与FrameLoader事件相关的FrameLoaderClient,为Document服务的D原创 2015-03-20 12:22:41 · 1996 阅读 · 0 评论 -
RefPtr和PassRefPtr基础[1]
历史: 在WebKit中,许多对象采用了引用计数。这种模式是通过类的ref,deref成员函数来递增和递减对象的引用记数。调用一次ref必须调用一次deref。当对象的引用记数为0的时候,对象就被删除。WebKit中许多类创建的新对象引用记数都为0,这被称作是浮动状态(Floating State)。在浮动状态的对象必须调用ref,在删除之前必须调用deref。WebCore中许多转载 2015-03-04 16:28:18 · 926 阅读 · 0 评论 -
一些特殊的Webkit Idl属性
Conditional=CONDITIONALNAMEWraps the generated binding code in "#if ENABLE(CONDITIONALNAME)". Typically used to allow turning off features on certain platforms (or to disable new features while th翻译 2015-02-18 09:22:38 · 1287 阅读 · 0 评论 -
Webkit的自定义属性获取函数以及属性删除函数实现
[概述: [CustomEnumerateProperty] 当给定的接口被枚举时,允许你为指定接口的属性获取函数编写自己的实现. 同样,当接口的属性被删除时,[CustomDeleteProperty]允许你编写自己的实现.u customEnumerateProperty](i), [CustomDeleteProperty](i)用法: 这两个修饰可原创 2015-02-20 18:26:38 · 1405 阅读 · 0 评论 -
WebkitIDL(一)
Web IDL 是一门语言,用来定义WebCore的接口如何绑定外部语言比如JavaScriptCore, ObjC, GObject,C++等等。要暴露WebCore的接口给这些外部语言的话,我们需要编写IDL文件例如XMLHttpRequest.idl, Element.idl等等。Webit编译的时候,这些IDL 文件会被解析、而后生成的代码会绑定到WebCore的实现,而且会自动生成Jav翻译 2015-02-15 08:35:06 · 3779 阅读 · 0 评论 -
Event的三个阶段:CAPTURING_PHASE,AT_TARGET,BUBBLING_PHASE
转自www.w3school.com.cn/htmldom/event_bubbles.asp在 2 级 DOM标准中,事件传播分为三个阶段:第一,捕获阶段。事件从 Document 对象沿着文档树向下一级一级传递给目标节点。如果目标的任何一个先辈注册了捕获事件句柄比如document.onkeydown=myonkeydown,那么在事件传播过程中马上运行这些句柄,而不等到传播到转载 2013-04-24 23:48:40 · 2188 阅读 · 0 评论 -
HTML DOM focus() 方法之原理
原创!转载清注明出自http://blog.youkuaiyun.com/lichwei19831 支持焦点W3C规定,只有web page明确设置了tabIndex的Element才定义为支持焦点,他是这么定义一个Node是否支持焦点的:bool Node::supportsFocus() const{ return hasRareData() && rareData()原创 2013-03-28 22:39:40 · 2353 阅读 · 0 评论 -
WebCore的mainframe或者frame和网页中的frame标签是什么关系?
原创,转载清注明!1 什么是mainFrame? WebCore中,Page的mainFrame只是一个软件上的概念,并不针对具体的网页标签,是webview 创建第一个Frame实例之后,Page的mainFrame存储的是此Frame的引用。它与网页中有没有Frame标签没有关系。 比如网页中这么写:hello world!W原创 2013-03-12 23:15:28 · 3477 阅读 · 0 评论 -
android的cache机制系列一
原创!转载请注明出自blog.youkuaiyun.com/lichwei1983 打算写个android的cache机制系列文章,目前部分主题还出于列提纲阶段,慢慢完善吧。1 安卓的焦点 当在Node List中找到新焦点时,检查后发现如果与自己是兄弟姐妹,就把它push到stack里面。当所有的兄弟姐妹都被找到,换句话说是父亲的最后一个孩子被找到、并被放到sta原创 2013-04-25 00:04:53 · 2316 阅读 · 0 评论 -
Webkit里创建Event的两种方法
转载请注明:http://blog.youkuaiyun.com/lichwei1983第一种方法: 直接修改WebCore的Window, HTML中关于Event名称,监听器。1 修改HTMLAttributeName.in,增加event name: onirkeyevent;2 修改DOMWindow.idl,增加事件监听器:attribute EventListener onir原创 2015-02-20 11:50:45 · 1479 阅读 · 0 评论 -
webkit Dump Render Tree 工作流程
转载:http://blog.youkuaiyun.com/lihui130135 作者:李东辉 邮件:lihui40319@gmail.com1.下载一个webkit的版本,目前我使用的版本是webkit-r54749,这个版本正好是android2.2版本对应webkit版本2.进行编译,这个过程根据自己机器环境qt,gtk,win之类都是可以编译,在这里简单说一下怎么进行编译切换到W转载 2012-11-15 21:13:13 · 1318 阅读 · 0 评论