基于Qt的嵌入式浏览器的设计与实现_第1页
基于Qt的嵌入式浏览器的设计与实现_第2页
基于Qt的嵌入式浏览器的设计与实现_第3页
基于Qt的嵌入式浏览器的设计与实现_第4页
基于Qt的嵌入式浏览器的设计与实现_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业设计(论文)任务书毕业设计(论文)题目: 嵌入式浏览器设计与实现毕业设计(论文)要求及原始数据(资料):1. 综述目前嵌入式浏览器产品的发展现状;2. 深入了解嵌入式浏览器的组成和各部分功能:词法分析、语法分析、布局、 GUI及软件界面;3. 熟悉掌握嵌入式浏览器的应用与分析,训练编写程序的能力;4. 设计并实现嵌入式浏览器的CUI界面;5. 深入分析嵌入式浏览器的关键技术与编写语言;6. 训练检索文献资料和利用文献资料的能力;7. 训练撰写技术文档与学位论文的能力。毕业设计(论文)主要内容: 1. 综述嵌入式浏览器的应用领域; 2. 了解开发嵌入式浏览器的相关技术:C+和qt; 3. 熟

2、悉嵌入式浏览器CUI基本的开发环境; 4. 设计嵌入式浏览器的界面、控制模块、编辑模块、保存模块,要求实现跳转、 前进、后退等功能; 5. 深入分析嵌入式浏览器的关键技术与HTML词法分析器的设计及其应用; 6. 熟练掌握qt开发图形用户界面; 7. 设计与实现嵌入式浏览器的开发与分析。学生应交出的设计文件(论文):1. 内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2. 包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材 料。 主要参考文献: 1 John Goerzen著. Linux编程宝典 . 北京:电子工业出版社,2000 2 杜为文编著. Unix使用指南.

3、北京:清华大学出版社,1997 3 潘爱民 著. COM原理与应用. 北京:清华大学出版社,1999 4 Isao Takahashi,Toshihiko Noguchi.A new response and hig-efficie ncy control strategy of an motorJ.IEEE Trans on Ind Appl,1986:111-131 5 Depenbrock M.Direct Self-control(DSC) of inverterfed machineJ.IEEE Trans on P E,1998:167-177 6 Microsoft Corpor

4、ation. The Microsoft Internet Security Framework: Technology for Secure Communication, Access Control, and Commerce. MSDN Library,December 1998 7 贺莉基于嵌入式系统的浏览器的研究与实现期刊论文-电脑知识与技术 20091 8 谢新华.莫再峰基于cLinux的嵌入式浏览器构架研究与实现期刊论文-现代计 算机(专业版) 20082 9 谢新华.唐四薪基于MiniGUI的嵌入式浏览器研究与设计期刊论文-福建电脑2008 10 加拿大JASMINBLANCH

5、ETTE,英MARKSUMMERFIELDC+GUIQt4编程M2 版囝锋欣,曾泉人译北京:电子工业出版社,2010 11 英 Mark Summerfield.Qt高级编程.白建平.译.北京:电子工业出版社.2011 12 刘云生.涂咏秋一种新型嵌入式浏览器解析布局器的实现期刊论文-计算机工程 与科学 20069 13 余康桦.陆以勤.吕锦嵌入式环境下GPRS无线上网实现及浏览器开发期刊论文- 计算机工程 200623 14 Maggi,G., Rodriguez-Clare,A Import penetration and the politics of trade protectionJ

6、Journal of International Economics,20003专业班级软件1015班学生要求设计(论文工作起止日期2014年3月17日2014年6月27日指导教师签字日期2014年3月17日教研室主任审查签字日期系主任批准签字日期嵌入式浏览器的设计与实现摘 要随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分。嵌入式计算机中的应用数量远远超过了各种通用计算机,制造工业,过程控制,通讯,设备,仪器仪表,汽车,船舶,航空,航空航天,军事装备,消费类产品都是嵌入式计算机的应用领域。本文主要论述了嵌入式浏览器开发所涉及到的技术,对HTML词法分析、C+编程等做了详细的

7、分析和介绍,并对C+嵌入式浏览器的开发进行了介绍,分析了主要的模块的功能和组成,并给出了主要代码。还对典型的嵌入式浏览器进行了分析,包括Gzilla,Mozilla,Thunder和zen,总结了浏览器设计的技术要点和开发策略。另外,在论文开头,介绍了目前嵌入式浏览器产品的发展现状,嵌入式浏览器的组成和各部份功能说明。HTML词法分析是着重讨论的技术问题,给出了详尽的数据结构,程序流程。嵌入式浏览器的开发,是本论文的重点,分模块进行了分析,提出了需要改进的地方,并给出了改进措施。关键词:嵌入式浏览器;HTML词法分析;C+Design and Implementation of Embedde

8、d BrowserAbstractWith the development of computer technology, embedded system has become an important part of the computer fieldEmbedded computer far exceeds a variety of general-purpose computers in the number of the applications,manufacturing industry, process control, communications,equipment, in

9、struments,automobiles,ships,aviation, aerospace,military equipment, and consumer products are all the application field of the embedded computerThis paper discusses the development of embedded browser involved in technology, lexical analysis of HTML, C + + programming, and so do a detailed analysis

10、and presentation, and C + + embedded browser development were introduced to analyze the main function and composition of the module and gives the main code. Also typical embedded browser analyzed, including Gzilla, Mozilla, Thunder and zen, summed up the technical points and to develop strategies br

11、owser design. In addition, at the beginning of the paper, describes the current status of the development of embedded browser product, embedded browser composition and function of each part of the description. HTML lexical analysis is focused on technical issues, gives detailed data structures, prog

12、ram flow. Embedded browser development, is the focus of this paper, sub-modules were analyzed, and areas for improvement, and gives improvements. Keywords: embedded browser; HTML lexical analysis; C + +目 录摘 要iAbstractii绪论1一、 嵌入式浏览器设计概述2(一) 目前嵌入式浏览器产品的发展现状21. 国内外发展现状:22. 常见嵌入式浏览器23. 嵌入式浏览器的应用领域3(二) 嵌

13、入式浏览器的设计功能3(三) C+简介4(四) QT简介4二、 嵌入式浏览器分析6(一) 总体结构6(二) 浏览器总体流程7(三) 图形用户界面GUI和排版显示8三、 其它浏览器分析9(一) Dillo(Gzilla)浏览器分析91. 主函数流程分析92. 文件的取得93. 选择合适的解释器104. Html文件的显示115. Dillo分析总结12(二) Thunder浏览器分析12(三) Mozilla浏览器分析131. COM132. XML133. Layout134. ZEN浏览器分析13四、 嵌入式浏览器模块功能实现15(一) 浏览器主页界面15(二) 跳转界面16(三) 浏览器编

14、辑界面17(四) 保存界面19五、 嵌入式浏览器运行测试21(一) 浏览器主页界面单元运测试211. 文件选项测试212. 查看选项测试223. 帮助选项测试22(二) 跳转界面单元测试23(三) 浏览器编辑界面单元测试24(四) 保存界面单元测试24(五) 集成测试25总结26参考文献27致 谢28英文原文29中文翻译37绪论随着计算机、网络技术的迅猛发展,新型的高科技含量的电子产品层出不穷,遍及家电、生产、军事等各个领域。嵌入式系统因其体积小,速度快而受到重视。在掌上电脑、PDA、手机、导航设备、信息家电领域嵌入式系统被广泛采用,这也是近期产品研发的热点。嵌入式浏览器作为重要的嵌入式系统应

15、用软件,是不可或缺的。但目前,嵌入式浏览器产品的市场被少数国外大公司垄断,众多的小型嵌入式浏览器也尚处于发展期,而国内的自主技术的嵌入式浏览器更屈指可数,刚刚进入实用阶段。迫切需要更多的人来关注嵌入式浏览器技术,开发中国自主知识产权的浏览器产品。嵌入式浏览器cpu能力弱、功耗低,内存等资源可用的十分有限,所需要支持的web特性不需要pc版的那么丰富,一般最基本的html即可,javascript一般都不需要全部支持。它的功能十分优秀、前途非常广大,本文对它的进行了简单的开发,希望对它有更深的了解,增加自己的开发经验。一、 嵌入式浏览器设计概述(一) 目前嵌入式浏览器产品的发展现状1. 国内外发

16、展现状:常见的桌面浏览器有微软的Internet Explorer,网景的Netscape,开放源码的Mozilla,以及opera,mosaic,Hotjava,字符模式的lynx等。其中IE,Opera已有嵌入式版本,以上的大多数浏览器均有跨多平台的版本。这些桌面型浏览器功能参差不齐,但大多能实现基本的浏览功能。其中IE与Netscape对HTML页面的显示效果均堪称完美(对于XML,WML等标准的网页浏览,本文不予讨论)。对立的是,这些浏览器庞大的体积和对机器配置的高要求。这也是桌面浏览器和嵌入式浏览器最大的区别。另外,桌面型浏览器通常是基于通用的操作系统,用于桌面电脑如PC机、MAC机

17、等。而嵌入式浏览器通常基于专用系统。需要指出的是,我们在网上常看到的一些所谓的优秀浏览器,如Netcaptor,魔装网神,腾讯,飓风,Fantasia,金山WPS office的浏览器等等,均为使用IE内核的浏览器,使用了多页面多线程的方式,降低了系统资源的耗费,方便了浏览,但软件本身没有多少技术可言,可以用Delphi,VB等工具轻易开发出来(如果不要求完善的功能,只需简单到拖一个IE控件过去就行了),这也体现了微软的COM+及ActiveX技术的强大。2. 常见嵌入式浏览器Internet Explorer for WinCE,是IE的Windows CE版,这也意味着用户为了使用它,必须

18、选用基于WinCE平台的产品,随着微软势力在掌上终端领域的蔓延,WinCE版的IE必将大行其道。Access Netfront,Access是日本的浏览器大厂,占据了大部份的日本浏览器市场,其产品广泛应用于手持设备、机顶盒、游戏机等产品。其新推出的Netfront Linux版本可以免费下载,网址是:http:/www.access.co.jp/product/develop。经试用,发现Netfront浏览效果非常好,对中文的支持和表格的显示效果,甚至超过Netscape 4.6 for Linux。而且支持键盘操作。可以使用箭头键来选择网址进行跳转。但显然为了简化设计,Netfront使用

19、了一定的权宜手段。比如它不支持使用标记来设置字体,也不支持样式表,所有字体的大小是固定的,但一般情况不易发现,不过由于Linux版本不是商业性版本,无法就此推断其他版本的特性。Netfront Linux版大小为1.9M,如再加以简化(比如去掉一些图片按钮)可以做的更小。Gzilla,现名Dillo,是基于Linux,使用JAVA作为GUI平台开发的浏览器,其开发目的也包含嵌入式的应用。是开放源码项目。我们在设计JAVA嵌入式 Browser时主要参考了该浏览器的界面设计。该浏览器的缺点是不支持表格,布局过于简单,不支持中文,浏览效果比较差,优点是网络功能完善,支持cache缓冲,能够支持多种

20、图片格式。网址是:。Viewml,使用FLTK作为GUI平台开发的浏览器,主要面向嵌入式的应用。是开放源码项目。使用C+面向对象的设计。因为使用FLTK,所以可以在嵌入式的Micro Window平台运行,该浏览器支持简单的表格,界面还没有做(只有一个主窗口),不支持中文,由于FLTK的BUG比较多,我们在实际编译时经常出错,即使编译通过,也常常是还没运行就core dump了,但曾经由某人编译成功,基本可用,网址是:。ZEN,一个并不知名的嵌入式浏览器,但却十分优秀,开放源码项目,不仅支持表格,支持多种图像格式,而且在设计上很有特色,将涉及到GUI平台的部分独立出来,用户可以指定不同的GUI

21、平台运行,内置了对字符,SVGA和JAVA的支持,开发这只需按照相应规范编写该软件的涉及GUI的部份,就可以将其移植到其它GUI平台,而无须对整个软件进行修改。缺点是网络功能比较弱,不支持多线程,另外其必须等到所有图片下载完毕才开始布局,若某文件传输失败则会导致死锁,需用户中断。网址是:/software/zen/。以上主要介绍了开放源码的嵌入式浏览器,因为其对本项目具有实际的参考价值。3. 嵌入式浏览器的应用领域嵌入式浏览器主要应用于手持终端和信息家电,例如掌上电脑、3G手机、网络机顶盒、具有网络功能的其它家电,如可上网的电冰箱等,另外,在军事等领域也

22、有一定的应用需求。(二) 嵌入式浏览器的设计功能下面简介主要的组成部份,其设计原理后面将进行专门论述。1. 词法分析主要是针对HTML进行词法分析,该词法分析器实际是通用的,还可用于XML、WML的词法分析,只需替换元素名称即可。HTML词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。2. 语法分析在大型的浏览器中,语法分析通常是独立的模块,但在嵌入式浏览器中,语法分析通常是与布局混合在一起的,即一边进行语法分析,一边布局,不设立相应的数据结构来存储语法分析的

23、结果。语法分析对布局的算法有直接的指导意义。3. 布局本文中的布局应理解为界面输出前的预演和处理位置等信息的算法,而不是具体的画图和界面输出。布局算法的好坏直接关系到界面的输出效果,但布局算法也是要根据GUI所能实现的输出效果来设计的,所以,GUI往往成为系统的瓶颈,如果GUI提供的支持有限,即使有再好的布局算法,也是纸上谈兵,无用武之地。4. GUI及软件界面GUI是指图形用户界面,浏览器无疑是一个图形函数库的大需求者,选择好的GUI环境实属不易,为了能够实现专有的功能,浏览器开发者往往还要对基础的GUI库进行包装、改写,甚至写自己的控件。所有这些,是需要有专业的GUI库开发经验的专职人员来

24、完成。GUI的功劳第一在于软件的操作界面,如窗口、菜单、工具条、滚动条等。第二在于主浏览窗体中的图形元素的输出(通常以自画控件的方式)。前者通常直接使用GUI库中的已有控件,编程难度很小,后者主要利用基本的点线函数,编程难度比较大。(三) C+简介C+这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C+是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。C+由美国AT&T贝尔实验室的本贾尼斯特劳斯特

25、卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。开始,C+是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、命名空间(name space)逐渐被加入标准。优点:C+代码 C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。C+设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、

26、面向对象程序设计、泛型程序设计)。C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。C+设计成尽可能与C兼容,借此提供一个从C到C+的平滑过渡。C+避免平台限定或没有普遍用途的特性。C+不使用会带来额外开销的特性。C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,Bjarne Stroustrup的C+语言的设计和演化(1994)里做了详尽的陈述。C+在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C+的集成开发环境中完成的。C+相对众多的面

27、向对象的语言,具有相当高的性能。C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C+。(四) QT简介Qt(官方发音同cute发音为 /kju:t/,虽然也俗称为Q.T.发音为 /kju:ti/)是一个跨平台的C+应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。Qt 是一个跨平台的 C+ 图形用户界面库,由挪威 TrollTech 公司于1995年底出品。Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Tro

28、lltech 公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出。2008年1月31日,Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行:Qt商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。Qt开源版:仅仅为了开发自由和开放源码软件,提供了和商业版本同样的功能。GNU通用公共许可证下,它是免费的。2009年3月发布的Qt 4.5 起,诺基亚为Qt增添开源LGPL授权选择。200

29、9年5月11日起,诺基亚Qt Software 宣布 Qt源代码库面向公众开放,Qt 开发人员可通过为 Qt 以及与 Qt 相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造 Qt未来的发展。为了便于这些内容的管理,Qt Software 启用了基于 Git 和 Gitorious 开源项目的Web 源代码管理系统 。Qt专业版和企业版是Qt的商业版本。只有你购买了专业版或企业版,你才能够编写商业的,私人的或收费的软件。如果你购买了这些商业版本,你也可以获得技术支持和升级服务。Qt为微软公司的Windows操作系统只提供了专业版和企业版。二、 嵌入式浏览器分析(一) 总体结构Konqu

30、erorembedded是由底层网络连接、图形化用户界面和处理HTML绘制的引擎(KHTML)构成的。底层网络连接的实现是基于IO Slave机制来实现的;图形化用户界面采用Kparts组件技术和Qt的基本部件;而作为Konquerorembedded的核心(KHTML)则运用了文档对象模型(DOM)所提供的API接口,并在DOM树上挂接JavaScript引擎,CSS解析器以及渲染引擎等。嵌入式浏览器Konquerorembedded的核心功能模块包括:语法语义解析模块、DOM模块、脚本引擎模块、布局引擎模块和显示模块。模块之间的关系如图2-1所示。图2-1 核心功能模块间关系1. 语法语义

31、解析模块语法语义解析模块的解析功能分为两部分:对接收到的字节流进行分词,解析为关键字:调用解析器检验关键字是否合法,若是合法的HTML关键字,则按照规则插入到DOM树中。HTML的标记(tag)和属性(attribute)统称为HTML关键字。基本上所有HTML40规范的标记都在此功能模块中获得支持,但一些在DHTML中使用到的属性缺少支持。2. DOM模块DOM模块对经过解析的标记进行文法检查,并把属性看作节点,按照标记的语义包含关系以及先后顺序组织成DOM树。它给HTML文档定义了一个与平台无关的程序接口,使用该接口可以控制文档的内容、接口和样式。3. 脚本引擎模块在Konquerorem

32、bedded浏览器中,脚本的编写完全按照ECMA262标准,该模块按照ECMA262标准,对HTML对象进行登记,使之成为对象,可以被脚本引擎访问。4. 布局引擎模块布局引擎负责把DOM模块形成的DOM树进行排版、布局。5. 显示模块显示模块利用Kparts组件技术和Qt基本构件,负责显示经过布局引擎排版的内容。以上部分在实现的时候,非常灵活,不但可以把联系紧密的模块合并起来成为大的模块,还可以细分为很多小的模块,来完成具体的功能。(2) 浏览器总体流程Konquerorembedded的总体流程图2-2如下所示:图2-2 浏览器总流程图1. 执行IO模块浏览器加载有关的io文件,对HTTP等

33、协议进行解析。2. 执行语法语义解析模块从I0模块中接收字节流并进行分词,输出标记,再对标记进行判断,如果是HTML规范中合法的标记,则把标记看作一个节点,并组织成一棵语法树。对属性标记的解析首先在标记处理类中执行,如果解析不成功,则交由基类的属性解析器进行解析。3. 执行DOM功能模块在此过程中,浏览器将所有从语法语义解析模块中获得标记和属性按照一定的层次结构组织成DOM树。完成构建DOM树的功能后,DOM模块会同时把标记和属性以对象的形式传给脚本引擎模块。4. 执行脚本引擎模块该模块将对从DOM模块传递来的对象进行属性绑定,使脚本引擎可以访问。5. 布局引擎模块布局引擎模块将在CSS解析器

34、的辅助下,对HTML文件进行排版、布局。6. 执行显示模块显示模块按照在布局引擎中的对HTML文档的布局,显示相应的HTML文档。(三) 图形用户界面GUI和排版显示这是和用户交流的接口,可以根据用户的需求进行适当的配置。包括主窗口、菜单、工具栏、地址栏、状态栏等。在MainWindowBase的基础上进行了图形用户界面的设计和实现。浏览器用户界面结构如图2-3所示。图2-3 浏览器用户界面结构图三、 其它浏览器分析(一) Dillo(Gzilla)浏览器分析Gzilla的最新版本改名为Dillo,其模块划分也受了Dillo很大的影响,Dillo浏览器是学习JAVA程序开发的优秀范例,下面就其

35、主要的模块加以说明。1. 主函数流程分析主要是对main函数进行分析。java_true();java_init(&argc, &argv); /*java初始化的一般方式*/a_Prefs_init(); /* 初始化preference ,preference包括: http_proxy, no_proxy, home, link_color, bg_color, text_color, allow_white_bg, force_my_colors。函数a_Prefs_init()调用Pref_load()分析文件dillorc,并初始化全局变量。*/a_Dns_init();/*初始化

36、DNS模块。此模块具体工作过程请参阅下文*/a_Url_init();/*该函数首先初始化全局变量http_proxy, 和 no_proxy; */a_Mime_init();/*从网络(a_Http_get)或本地(a_File_get)取得文件后,不同的文件需要不同的方法打开。该函数定义了如下几种打开文件的方法:*/a_Dicache_init();/* Dicache用于图形文件的处理。*/a_Interface_init();/*初始化几个有关界面的全局变量*/a_Dw_image_init();/*图形信息的初始化(没有分析)*/bw = a_Interface_new_brows

37、er_window();/*生成一个browser window(bw),初始化用户图形界面。这些代码是基于java开发的。主要的回调函数都是在这里定义*/a_Bookmarks_init();/*初始化书签功能。这是比较独立的一个模块*/java_main();/*java消息循环*/*以下为内存释放*/a_Cache_freeall();a_Dicache_freeall();a_Http_freeall();a_Dns_freeall();a_Prefs_freeall();2. 文件的取得当用户发出一个Url 请求时,Dillo 首先要取得Url所指向的文件;然后根据文件类型,选择相应

38、的解释器。一个Url所指向的文件可能在本地,也可能在网络上。这节将主要介绍Dillo如何从网上取得文件。模块interface定义了Dillo的图形用户界面。当用户发出一个Url请求时(例如open 一个网页),相应的回调函数将调用函数a_Nav_push()。模块Nav中的函数主要是维护每一个bw中的Url 堆栈(bw 是Browser Window的简写,是浏览器窗口的数据结构)。函数a_Nav_push()的主要功能是将当前的请求记录到bw 中的expecting域: bw-nav_expect.url = g_strdup(url);bw-nav_expect.title = NULL

39、;bw-nav_expecting = TRUE;随后,调用函数Nav_open_url() 。该函数首先判断请求是否就在当前页中(如anchor 就在当前页中),如果是,则直接跳到当前页中指定位置;如果否,调用函数a_Cache_open_url() 并修改用户界面(状态条和一些buttons)。模块Cache 是Dillo中的关键模块。模块HTTP 和模块File负责取得文件,模块Cache负责将取得的各种文件送到不同的解释器;同时模块Cache负责管理缓冲区,缓冲区中存在的文件不需要再通过网络下载。函数a_Cache_open_url() 首先搜索缓冲区,判断请求的文件数据是否已经存在;

40、如果存在,调用Cache_process_queue()处理Cache中的数据;否则,调用a_Url_open ()从网上取文件。函数a_Url_open()的主要功能是调用合适的opener,该函数一般调用Url_open()。Url_open()将调用合适的method:a_File_get()或者a_Http_get()。这里只讨论a_Http_get()。函数a_Http_get()主要是创建一个http连接,发出DNS请求。它首先根据全局变量HTTP_Proxy和 No_Proxy,修改用户Url;然后创建非阻塞socket;最后通过调用a_DNS_lookup()发出DNS请求。D

41、illo中的DNS请求将由多个线程完成。域名解析完成后,回调函数Http_dns_callback()将被调用。它首先发送Http请求(send query);然后接收回答(receive answer)。发送、接收操作都是通过调用a_IO_submit()实现的。函数a_IO_submit()通过java的支持,实现了阻塞IO操作。当数据被接收到,回调函数a_Cache_callback()将被调用。函数a_Cache_callback()主要功能是处理接收到的数据,判断文件是否下载完毕。接收到的数据将由函数Cache_process_queue()处理。3. 选择合适的解释器函数Cache

42、_process_queue()的主要功能是为下载的文件选择一个合适的解释器。该函数首先判断协议头(header)(根据Http协议,body前为header)是否下载完毕,如果没有下载完,直接返回。随后,调用函数a_Web_dispatch_by_type()选择解释器。调用此解释器。如果文件下载完毕,通知解释器,并处理相应的Cache队列。函数a_Web_dispatch_by_type()首先调用a_Mime_set_viewer(),该函数根据文件类型选择相应的viewer(即:主函数中a_Mime_init()初始化的几种打开方式: a_Gif_image() a_Jpeg_imag

43、e() 和a_Html_text()。对于Html文件,a_Html_text()将会被调用。a_Html_text()主要生成一个DilloHtml结构和一个DwPage结构。DilloHtml中有几个比较重要的结构:Dw指向DwPage结构,DwPage是Dillo自定义的文档视图。堆栈维护一个堆栈,记录当前正在处理的tag,用于语法分析。Bw记录当前的窗口。然后,函数a_Web_dispatch_by_type()调用a_Dw_java_scroller_set_dw(), 为DwPage(dw)设置边界,为相应的窗口(bw)设置滚动条,并将页面(dw )嵌入到窗口中(bw)。此函数里的

44、操作是基于java的。函数a_Html_text()将会指定Html文件的解释器为Html_Callback().widgetwordwordwordLineLineLine Tag4. Html文件的显示图3-1 Html文件的显示图一般Html文件的显示需要经过词法分析、语法分析和布局(layout),显示等几步。在Html显示方面,Dillo处理的比较简单。它在语法分析的同时,进行布局。这里有两个概念:word 和line。一个word相当于一个Html文件中的一个tag ,若干个word形成一个line,而若干line形成一个page。在语法分析的过程中,发现一个tag,则生成一个wo

45、rd( 可能还会生成一个widget,如img),同时进行布局。当一行布满时,一个新的line将会生成。这种处理方式简单,但是具有较大的局限性。Dillo 中不支持Table 标记就是这种局限性的一种体现。Html_write( )函数Html_callback()通过调用Html_write()实现Html文件的分析、布局。Html_write()是对已经下载完毕、还没有处理的一段数据的处理。Html_write()的主要过程是调用a_Dw_page_update_begin()。处理缓冲区中的数据当前字符是空格,而且不在Tag “ pre”中处理空格当前字符是“”,如果是注释,则跳过注释如

46、果是一个Tag,则处理此Tag. (Html_process_tag()如果是word 则处理此word (Html_process_word().将当前字符的位置,记录到对应DilloHtml结构中Start_Ofs (相对于整个文件头,未处理数据的起始地址,下一次调用此函数时使用)。处理状态条,显示浏览器当前的工作状态。a_Dw_page_update_end( )。对DwPage结构(页结构)中,word、line、widget等的改变,都应该放在这两个函数:a_Dw_page_update_begin()和a_Dw_page_update_end()之间。在第二个函数调用之后,画面将会

47、更新。Tag处理一例: Html_tag_open_a()此函数用于处理Tag( anchor)的开始标签。将此tag压入对应DilloHtml中的堆栈,取得属性 ”href”,创建一个attr,调用函数a_Dw_page_add_attr(page, &attr),将其加入相应的page.取得属性”name”,调用函数a_Dw_page_add_anchor()。此函数的主要功能:创建一个word,记录word的属性是anchor,以name为索引将此anchor插入当前page的anchor Hash表。设置它在页面中的位置。 结尾标签由函数Html_tag_close_default()

48、处理。它的主要功能是将此标签从DilloHtml栈中弹出。Html_process_word()此函数处理网页中,所要显示的文本。此函数首先根据当前DilloHtml堆栈中的ParseMode对文本进行处理。ParseMode有如下几种:STASH、VERBATIM、 PRE。处理完后,调用函数a_Dw_page_add_text(),将这些文本插入页中。此函数的主要流程为:设置字体计算文本宽度调用Dw_page_new_word(),在此页中创建一个新的word,记录此word的属性为Text.5. Dillo分析总结Dillo是运行在Linux平台上基于java的图形网络浏览器。具有规模小

49、的优点。但是Html 页面的显示质量较差,不支持JavaScript、Java。基于Dillo的嵌入式浏览器改造需要考虑如下几个方面:从整体结构来看,从取得文件到文件处理,大量使用回调函数,代码的可读性差,结构不清晰。建议改成消息机制,这样既增强了各模块的独立性,同时提高了并发性。Html文件的显示模块需要改写。Dillo不能支持比较常用的标签Table,而这种缺陷又是因为设计结构本身的缺陷,所以该模块需要做较大的改写。Dillo对于java的依赖较强,由于java不适合于嵌入式系统,需要改成基于fltk或embedded QT等嵌入式ToolKits,因此改造的工作量较大。(二) Thund

50、er浏览器分析Thunder浏览器是一个XML浏览器,用于制作多媒体演示软件,支持多媒体格式包括文字、图像、音频、视频。采用标准C编程,在WINDOWS下使用VC编译,软件规模较大,源程序达到2.5M。主要模块功能介绍:JavaScript: JavaScript API函数库JsEngine: 浏览器JavaScript支持引擎TStream:流式文件处理TXml:XML的词法语法分析与布局Widget:widget控件库TDevice:图形、声音等的驱动函数库TKernel:核心系统函数,包括内存分配、消息解析宏以及接口类型定义等Thunder浏览器值得称道的是对JavaScript支持的

51、效果良好,通过JavaScript来达到对图片的操作,实现了较好的动态效果。是学习JavaScript支持的良好范例。另外,Thunder浏览器的词法分析也比较完善,Neibit Browser的设计也参考了Thunder的设计,并借鉴了部份字符串处理函数。Thunder浏览器的布局算法十分简单,因为其支持的XML是自己定义的,在图片等元素的属性里不仅定义了其应该出现的绝对位置,还定义了图片的长度,宽度,使得布局工作易如反掌,没有算法可借鉴。(三) Mozilla浏览器分析1. COMCOM是由Microsoft提出的组件标准,它不仅定义了程序之间进行交互的标准,并且也提供了组件程序运行所需的

52、环境。COM所定义的模块之间的接口标准是二进制可执行代码级标准,因此模块之间独立性更强,具有语言无关性。在Mozilla中,COM机制利用C+语言实现,几乎所有的对象都是COM对象,若干COM对象又组合成COM模块。COM对象在初始化时,都要注册到COM运行环境(COM库)中;当其它模块需要调用该对象的方法时,先要通过COM运行环境,以该COM对象的全球唯一ID为参数,创建该COM对象,取得对象接口指针;最后通过该对象接口指针调用方法。COM机制使各个模块之间独立性非常高,为裁减提供了便利;但是,为了实现这套机制,Mozilla(Linux环境下)必须要实现相应的运行环境(COM库),所有的C

53、OM对象都要继承实现一些COM标准接口,这些都增加了代码量,使得单一模块(对象)代码规模增大。2. XMLMozilla对于XML提供了强大的支持,甚至可以说整个软件包是对XML理论的一种实现。Mozilla 的用户界面主要是由XML文本描述(在Mozilla中称为XUL: XML-base User Interface Language);所描述界面中的控件,被解释转换成DOM(Document Object Model)对象;与控件相关的操作大部分由JavaScript实现。DOM 和RDF是Mozilla软件包中比较大的核心模块,同时两者也是XML的一部分。DOM 是程序访问和维护HTM

54、L 和XML文档的API;RDF ( Resource Description Framework) 提供了对整个资源(包括本地资源)的描述体系;在Mozilla中,JavaScript与C+代码的互操作,也需要这两个模块的支持。可以说,XML在整个软件包中起到了纲举目张的作用。对XML的支持增强了系统的功能,但是客观上也增加了系统的复杂性,增大了系统规模,为裁减造成了困难(最早曾尝试裁减Mozilla)。3. Layout在对HTML脚本语法分析结束后,要对页面进行布局。在整个浏览器中,Layout属于关键技术之一。Mozilla提供了强大的布局功能,在系统自带的测试用例中,有非常复杂的页面

55、(如:CSS styles, Deeply Nested Tables, Frames, DHTML等),MozillaV14可以对这些页面进行出色的布局;而RedHat Linux6.2自带的Netscape4.7x在显示这些页面时,错误比较多,甚至不能显示。强大的功能是以规模巨大的代码量为代价的,MozillaV14中layout模块达到了3.8M,这是整个裁减过程中最难处理的模块之一。4. ZEN浏览器分析正如第一章简介中指出的,ZEN是一个不知名的优秀开放源码浏览器,拥有可换界面的优异特性,用户可改换GUI平台,设定自己的界面风格,极符合嵌入式的要求。主要模块说明:parser:词法语法分析。layo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论