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