
Browser
zhanglu201112
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浏览器探究——Framework层基本架构
Framework层的主要功能 Framework层的webkik主要起到提供给APP层一个WebView控件,WebSettings设置,WebViewClient回调,WebChromeClient回调。这些用于上层APP实现浏览网页的功能。 而对于下层,通过native的接口与c++层的WebKit对接,把上层需求传递给WebKit,把WebKit的回调返回给上层或者自己做一些处转载 2014-03-25 19:56:40 · 666 阅读 · 0 评论 -
浏览器探究——webkit部分——Button
测试页面 DOM Tree *#document 0xcfbbf8 HTML 0xc7dba8 HEAD 0xcef368 BODY 0xcd4aa8 INPUT 0x9100b8 STYLE=height:30px; width: 70px; Ren转载 2014-03-25 20:00:35 · 879 阅读 · 1 评论 -
浏览器探究——APP层基本架构
App层的功能主要分几块: 使用WebView的浏览器页面主体 除WebView之外的UI 页面的相关功能,如页内查找,前进,后退 设置 事件 多窗口管理 书签/历史记录 首先看构成主体框架的几个类 BrowserActivity BrowserActivity继承自Activity,提供了对Browser应用生命周期的控制,事转载 2014-03-25 19:58:00 · 936 阅读 · 0 评论 -
浏览器探究——回退和前进
前进: 在菜单中点击前进功能主线程会执行BrowserActivity.onOptionsItemSelected,它会调用Controller.onOptionsItemSelected,在处理该菜单项时执行如下语句getCurrentTab().goForward();入口点很明确,就是调用了当前tab的goForward函数。 Tab.goForward调用了主WebView的g转载 2014-03-25 20:21:59 · 1071 阅读 · 0 评论 -
浏览器探究——下载
当前我的机器还是无网络状态,以下讨论可能有错误 长按一个链接,会调用到BrowserActivity.onContextItemSelected,进而调用Controller. onContextItemSelected。在处理该菜单项时,会调用当前WebView的requestFocusNodeHref。 /** * Request the anchor orimag转载 2014-03-25 20:21:01 · 856 阅读 · 0 评论 -
浏览器探究——webkit部分——解析(1)HTML起源
该篇只学习到数据从接收到,到创建Document,创建DocumentParser的过程。 主要讲述到 DocumentParser::appendBytes DocumentParser::finish 的调用处,后续篇章会学习这两个函数的实现部分。 测试页面: First name: Last name:转载 2014-03-25 20:02:51 · 731 阅读 · 0 评论 -
浏览器探究——webkit部分——资源加载进度
该文看下在ResourceLoadNotifier::didXXX中对页面加载进度的处理。 首先在ResourceLoadNotifier::didReceiveResponse中,通过Frame找到Page,然后通过Page找到ProgressTracker,然后 ProgressTracker 它负责计算和维护当前接收的进度情况,其中有成员 long longm_tot转载 2014-03-25 20:15:22 · 1039 阅读 · 0 评论 -
浏览器探究——webkit部分——解析HTML(3)HTMLToken的处理
接HTMLTokenizer的处理篇 上篇学习到HTMLTokenizer的处理,它是利用有穷状态自动机来完成词法解析的,把解码后的字符串作为输入,输出一个个的HTMLToken的。 测试页面: First name: Last name: 它的调用栈如下: 看下当前完整的调用栈: #0W转载 2014-03-25 20:06:06 · 1304 阅读 · 0 评论 -
浏览器探究——多窗口
点击网址导航栏后面的多窗口的图标。 会调用NavigationBarPhone.onClick。 NavigationBarPhone 该类创建了导航栏的各个控件,其中的onClick是各个控件点击的总入口。 通过名字可以看出这个导航栏是指针对手机的,因为4.0即包含phone的需求又包含pad的需求。NavigationBarPhone是继承自NavigationBarB转载 2014-03-25 20:20:02 · 1173 阅读 · 0 评论 -
浏览器探究——webkit部分——http请求
执行加载一个页面时,BrowserFrame的loadUrl会通过jni调用到WebCoreFrameBridge.cpp的LoadUrl中。Java层的BrowserFrame对应的是c层的WebCore::Frame WebCoreFrameBridge::LoadUrl 这个函数会通过参数获取到url并用url创建一个WebCore::KURL。这个类其实就是对url的一个封装,转载 2014-03-25 20:18:46 · 1106 阅读 · 0 评论 -
浏览器探究——UserAgent
首先看APP层对UA的使用情况 BrowserSettings对UA的维护 在BrowserSettings.java中定义了几个固定的UA值。 还包含了一个成员private WeakHashMap mCustomUserAgents;该成员记录的是某个WebSettings被用户额外的设置的UA情况。浏览器中有唯一的一个BrowserSettings。但是每个WebView有转载 2014-03-25 20:10:14 · 1041 阅读 · 1 评论 -
浏览器探究——webkit部分——WebKit平台相关层基本架构
该部分研究的很浅,会有很多错误之处,请注意。 这里主要先关注下Source/WebKit/android下的几个文件 跟FrameWork层通过JNI关联的类在jni/目录下 跟WebCore相关联的一些类在WebCoreSupport/目录下 一些跟cache相关的和WebView对应的jni在nav/目录下 WebCoreFrameBridge.h/cp转载 2014-03-25 19:55:18 · 665 阅读 · 0 评论 -
浏览器探究——APP层UI布局
最外层的布局 最外层的View是Activity的mActivity.getWindow().getDecorView(),显示为PhoneWindow$DecorView 它的内部有FrameLayout为id/content,通过FrameLayout frameLayout = (FrameLayout) mActivity.getWindow().getDecorView().转载 2014-03-25 19:53:31 · 1399 阅读 · 0 评论 -
浏览器探究——执行网页跳转
Main线程中执行。 UrlInputView 控件UrlInputView执行OnEditorAction->finishInput /** *url/search input view *handling suggestions */ public class UrlInputView extendsAutoCompleteTextView转载 2014-03-25 20:23:41 · 1834 阅读 · 0 评论 -
浏览器探究——WebKit部分——支持WML
开启宏定义 Android的代码中本身已经对WML做了一定的支持了,但是默认情况下并没有开启,这些支持都在一个ENABLE_WML的宏定义中括起来了,可以grep下源代码看下有很多ENABLE(WML)括起来的代码。 代码中需要的宏 这个ENABLE的宏定义我查的在Source/JavaScriptCore/wtf/Platform.h中被定义的,不知道为什么在这个目录下。#de转载 2014-03-25 20:13:19 · 702 阅读 · 0 评论 -
浏览器探究——webkit部分——解析HTML(2)解码和HTMLTokenizer的处理
接解析HTML起源篇 起源篇提到数据的处理会调用到如下的两个函数处 DocumentParser::appendBytes DocumentParser::finish 一个是解析过程中的,一个是解析完成的。而解析开始时,就是起源篇讲的Document,RenderView,DocumentParser的创建,注意当前是html文件,所以创建的是HTMLDocument和H转载 2014-03-25 20:04:09 · 1131 阅读 · 0 评论 -
浏览器探究——webkit部分——HTMLinput标签
测试页面 First name: Last name: 这里不看DOM的构建以及layout和Rander的处理等,这里只关注下input标签的一些基本的处理情况。 HTMLInputElement HTML的Input标签的类结构。 class HTMLInputElement : publicHTMLTextFo转载 2014-03-25 20:11:27 · 1298 阅读 · 0 评论 -
浏览器探究——webkit部分——http响应
首先回忆下http发送的位置,在ResourceHandle::start中使用静态函数ResourceLoaderAndroid::start进行发送。这里创建了WebUrlLoader,它有个成员WebUrlLoadClient类,这个类有主要成员,WebFrame,WebCore::ResourceHandle,WebRequest,WebResponse。其中WebCore::Resour转载 2014-03-25 20:16:25 · 1065 阅读 · 0 评论