




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务书毕业设计(论文)题目:嵌入式浏览器设计与实现毕业设计(论文)要求及原始数据(资料):1.综述目前嵌入式浏览器产品的发展现状;2.深入了解嵌入式浏览器的组成和各部分功能:词法分析、语法分析、布局、GUI及软件界面;3.熟悉掌握嵌入式浏览器的应用与分析,训练编写程序的能力;4.设计并实现嵌入式浏览器的CUI界面;5.深入分析嵌入式浏览器的关键技术与编写语言;6.训练检索文献资料和利用文献资料的能力;7.训练撰写技术文档与学位论文的能力。毕业设计(论文)主要内容:1.综述嵌入式浏览器的应用领域;2.了解开发嵌入式浏览器的相关技术:C+和qt;3.熟悉嵌入式浏览器CUI基本的开发环境;4.设计嵌入式浏览器的界面、控制模块、编辑模块、保存模块,要求实现跳转、前进、后退等功能;5.深入分析嵌入式浏览器的关键技术与HTML词法分析器的设计及其应用;6.熟练掌握qt开发图形用户界面;7.设计与实现嵌入式浏览器的开发与分析。学生应交出的设计文件(论文):1.内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2.包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。主要参考文献:1JohnGoerzen著.Linux编程宝典.北京:电子工业出版社,20002杜为文编著.Unix使用指南.北京:清华大学出版社,19973潘爱民著.COM原理与应用.北京:清华大学出版社,19994IsaoTakahashi,ToshihikoNoguchi.Anewresponseandhig-efficiencycontrolstrategyofanmotorJ.IEEETransonIndAppl,1986:111-1315DepenbrockM.DirectSelf-control(DSC)ofinverterfedmachineJ.IEEETransonPE,1998:167-1776MicrosoftCorporation.TheMicrosoftInternetSecurityFramework:TechnologyforSecureCommunication,AccessControl,andCommerce.MSDNLibrary,December19987贺莉基于嵌入式系统的浏览器的研究与实现期刊论文-电脑知识与技术200918谢新华.莫再峰基于cLinux的嵌入式浏览器构架研究与实现期刊论文-现代计算机(专业版)200829谢新华.唐四薪基于MiniGUI的嵌入式浏览器研究与设计期刊论文-福建电脑200810加拿大JASMINBLANCHETTE,英MARKSUMMERFIELDC+GUIQt4编程M2版囝锋欣,曾泉人译北京:电子工业出版社,201011英MarkSummerfield.Qt高级编程.白建平.译.北京:电子工业出版社.201112刘云生.涂咏秋一种新型嵌入式浏览器解析布局器的实现期刊论文-计算机工程与科学2006913余康桦.陆以勤.吕锦嵌入式环境下GPRS无线上网实现及浏览器开发期刊论文-计算机工程20062314Maggi,G.,Rodriguez-Clare,AImportpenetrationandthepoliticsoftradeprotectionJJournalofInternationalEconomics,20003专业班级学生要求设计(论文)工作起止日期指导教师签字日期教研室主任审查签字日期系主任批准签字日期嵌入式浏览器的设计与实现摘要随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分。嵌入式计算机中的应用数量远远超过了各种通用计算机,制造工业,过程控制,通讯,设备,仪器仪表,汽车,船舶,航空,航空航天,军事装备,消费类产品都是嵌入式计算机的应用领域。本文主要论述了嵌入式浏览器开发所涉及到的技术,对HTML词法分析、C+编程等做了详细的分析和介绍,并对C+嵌入式浏览器的开发进行了介绍,分析了主要的模块的功能和组成,并给出了主要代码。还对典型的嵌入式浏览器进行了分析,包括Gzilla,Mozilla,Thunder和zen,总结了浏览器设计的技术要点和开发策略。另外,在论文开头,介绍了目前嵌入式浏览器产品的发展现状,嵌入式浏览器的组成和各部份功能说明。HTML词法分析是着重讨论的技术问题,给出了详尽的数据结构,程序流程。嵌入式浏览器的开发,是本论文的重点,分模块进行了分析,提出了需要改进的地方,并给出了改进措施。关键词:嵌入式浏览器;HTML词法分析;C+iDesignandImplementationofEmbeddedBrowserAbstractWiththedevelopmentofcomputertechnology,embeddedsystemhasbecomeanimportantpartofthecomputerfieldEmbeddedcomputerfarexceedsavarietyofgeneral-purposecomputersinthenumberoftheapplications,manufacturingindustry,processcontrol,communications,equipment,instruments,automobiles,ships,aviation,aerospace,militaryequipment,andconsumerproductsarealltheapplicationfieldoftheembeddedcomputerThispaperdiscussesthedevelopmentofembeddedbrowserinvolvedintechnology,lexicalanalysisofHTML,C+programming,andsodoadetailedanalysisandpresentation,andC+embeddedbrowserdevelopmentwereintroducedtoanalyzethemainfunctionandcompositionofthemoduleandgivesthemaincode.Alsotypicalembeddedbrowseranalyzed,includingGzilla,Mozilla,Thunderandzen,summedupthetechnicalpointsandtodevelopstrategiesbrowserdesign.Inaddition,atthebeginningofthepaper,describesthecurrentstatusofthedevelopmentofembeddedbrowserproduct,embeddedbrowsercompositionandfunctionofeachpartofthedescription.HTMLlexicalanalysisisfocusedontechnicalissues,givesdetaileddatastructures,programflow.Embeddedbrowserdevelopment,isthefocusofthispaper,sub-moduleswereanalyzed,andareasforimprovement,andgivesimprovements.Keywords:embeddedbrowser;HTMLlexicalanalysis;C+ii目录摘要.iAbstract.ii绪论.1一、嵌入式浏览器设计概述.2(一)目前嵌入式浏览器产品的发展现状.21.国内外发展现状:.22.常见嵌入式浏览器.23.嵌入式浏览器的应用领域.3(二)嵌入式浏览器的设计功能.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.COM.132.XML.133.Layout.134.ZEN浏览器分析.13四、嵌入式浏览器模块功能实现.15(一)浏览器主页界面.15(二)跳转界面.16(三)浏览器编辑界面.17(四)保存界面.19五、嵌入式浏览器运行测试.21(一)浏览器主页界面单元运测试.211.文件选项测试.212.查看选项测试.223.帮助选项测试.22(二)跳转界面单元测试.23(三)浏览器编辑界面单元测试.24(四)保存界面单元测试.24iii(五)集成测试.25总结.26参考文献.27致谢.28英文原文.29中文翻译.370绪论随着计算机、网络技术的迅猛发展,新型的高科技含量的电子产品层出不穷,遍及家电、生产、军事等各个领域。嵌入式系统因其体积小,速度快而受到重视。在掌上电脑、PDA、手机、导航设备、信息家电领域嵌入式系统被广泛采用,这也是近期产品研发的热点。嵌入式浏览器作为重要的嵌入式系统应用软件,是不可或缺的。但目前,嵌入式浏览器产品的市场被少数国外大公司垄断,众多的小型嵌入式浏览器也尚处于发展期,而国内的自主技术的嵌入式浏览器更屈指可数,刚刚进入实用阶段。迫切需要更多的人来关注嵌入式浏览器技术,开发中国自主知识产权的浏览器产品。嵌入式浏览器cpu能力弱、功耗低,内存等资源可用的十分有限,所需要支持的web特性不需要pc版的那么丰富,一般最基本的html即可,javascript一般都不需要全部支持。它的功能十分优秀、前途非常广大,本文对它的进行了简单的开发,希望对它有更深的了解,增加自己的开发经验。1一、嵌入式浏览器设计概述(一)目前嵌入式浏览器产品的发展现状1.国内外发展现状:常见的桌面浏览器有微软的InternetExplorer,网景的Netscape,开放源码的Mozilla,以及opera,mosaic,Hotjava,字符模式的lynx等。其中IE,Opera已有嵌入式版本,以上的大多数浏览器均有跨多平台的版本。这些桌面型浏览器功能参差不齐,但大多能实现基本的浏览功能。其中IE与Netscape对HTML页面的显示效果均堪称完美(对于XML,WML等标准的网页浏览,本文不予讨论)。对立的是,这些浏览器庞大的体积和对机器配置的高要求。这也是桌面浏览器和嵌入式浏览器最大的区别。另外,桌面型浏览器通常是基于通用的操作系统,用于桌面电脑如PC机、MAC机等。而嵌入式浏览器通常基于专用系统。需要指出的是,我们在网上常看到的一些所谓的优秀浏览器,如Netcaptor,魔装网神,腾讯,飓风,Fantasia,金山WPSoffice的浏览器等等,均为使用IE内核的浏览器,使用了多页面多线程的方式,降低了系统资源的耗费,方便了浏览,但软件本身没有多少技术可言,可以用Delphi,VB等工具轻易开发出来(如果不要求完善的功能,只需简单到拖一个IE控件过去就行了),这也体现了微软的COM+及ActiveX技术的强大。2.常见嵌入式浏览器InternetExplorerforWinCE,是IE的WindowsCE版,这也意味着用户为了使用它,必须选用基于WinCE平台的产品,随着微软势力在掌上终端领域的蔓延,WinCE版的IE必将大行其道。AccessNetfront,Access是日本的浏览器大厂,占据了大部份的日本浏览器市场,其产品广泛应用于手持设备、机顶盒、游戏机等产品。其新推出的NetfrontLinux版本可以免费下载,网址是:http:/www.access.co.jp/product/develop。经试用,发现Netfront浏览效果非常好,对中文的支持和表格的显示效果,甚至超过Netscape4.6forLinux。而且支持键盘操作。可以使用箭头键来选择网址进行跳转。但显然为了简化设计,Netfront使用了一定的权宜手段。比如它不支持使用标记来设置字体,也不支持样式表,所有字体的大小是固定的,但一般情况不易发现,不过由于Linux版本不是商业性版本,无法就此推断其他版本的特性。NetfrontLinux版大小为1.9M,如再加以简化(比如去掉一些图片按钮)可以做的更小。Gzilla,现名Dillo,是基于Linux,使用JAVA作为GUI平台开发的浏览器,其开发目的也包含嵌入式的应用。是开放源码项目。我们在设计JAVA嵌入式Browser时主要参考了该浏览器的界面设计。该浏览器的缺点是不支持表格,布局过于简单,不支持中文,浏览效果比较差,优点是网络功能完善,支持cache缓冲,能够支持多种图片格式。网址是:。Viewml,使用FLTK作为GUI平台开发的浏览器,主要面向嵌入式的应用。是开放源码项目。使用C+面向对象的设计。因为使用FLTK,所以可以在嵌入式的MicroWindow平台运行,该浏览器支持简单的表格,界面还没有做(只有一个主窗口),不支持中文,由于FLTK的BUG比较多,我们在实际编译时经常出错,即使编译通过,也常常是还没运2行就coredump了,但曾经由某人编译成功,基本可用,网址是:。ZEN,一个并不知名的嵌入式浏览器,但却十分优秀,开放源码项目,不仅支持表格,支持多种图像格式,而且在设计上很有特色,将涉及到GUI平台的部分独立出来,用户可以指定不同的GUI平台运行,内置了对字符,SVGA和JAVA的支持,开发这只需按照相应规范编写该软件的涉及GUI的部份,就可以将其移植到其它GUI平台,而无须对整个软件进行修改。缺点是网络功能比较弱,不支持多线程,另外其必须等到所有图片下载完毕才开始布局,若某文件传输失败则会导致死锁,需用户中断。网址是:/software/zen/。以上主要介绍了开放源码的嵌入式浏览器,因为其对本项目具有实际的参考价值。3.嵌入式浏览器的应用领域嵌入式浏览器主要应用于手持终端和信息家电,例如掌上电脑、3G手机、网络机顶盒、具有网络功能的其它家电,如可上网的电冰箱等,另外,在军事等领域也有一定的应用需求。(二)嵌入式浏览器的设计功能下面简介主要的组成部份,其设计原理后面将进行专门论述。1.词法分析主要是针对HTML进行词法分析,该词法分析器实际是通用的,还可用于XML、WML的词法分析,只需替换元素名称即可。HTML词法分析是浏览器设计的基础环节之一,也是整个设计过程中重要的前端工作,其数据结构的拟定与接下来的语法分析和布局算法密切相关,词法分析的效率与准确性、容错性也关系到整个浏览器设计的质量。2.语法分析在大型的浏览器中,语法分析通常是独立的模块,但在嵌入式浏览器中,语法分析通常是与布局混合在一起的,即一边进行语法分析,一边布局,不设立相应的数据结构来存储语法分析的结果。语法分析对布局的算法有直接的指导意义。3.布局本文中的布局应理解为界面输出前的预演和处理位置等信息的算法,而不是具体的画图和界面输出。布局算法的好坏直接关系到界面的输出效果,但布局算法也是要根据GUI所能实现的输出效果来设计的,所以,GUI往往成为系统的瓶颈,如果GUI提供的支持有限,即使有再好的布局算法,也是纸上谈兵,无用武之地。4.GUI及软件界面GUI是指图形用户界面,浏览器无疑是一个图形函数库的大需求者,选择好的GUI环境实属不易,为了能够实现专有的功能,浏览器开发者往往还要对基础的GUI库进行包装、改写,甚至写自己的控件。所有这些,是需要有专业的GUI库开发经验的专职人员来完成。GUI的功劳第一在于软件的操作界面,如窗口、菜单、工具条、滚动条等。第二在于主浏览窗体中的图形元素的输出(通常以自画控件的方式)。前者通常直接使用GUI库中的已有控件,编程难度很小,后者主要利用基本的点线函数,编程难度比较大。3(三)C+简介C+这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,“CPP”。它是一种使用非常广泛的计算机编程语言。C+是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。C+由美国AT&T贝尔实验室的本贾尼斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“CwithClasses”带类的C)。开始,C+是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、RTTI、命名空间(namespace)逐渐被加入标准。优点:C+代码C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。C+设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。C+设计成尽可能与C兼容,借此提供一个从C到C+的平滑过渡。C+避免平台限定或没有普遍用途的特性。C+不使用会带来额外开销的特性。C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,BjarneStroustrup的C+语言的设计和演化(1994)里做了详尽的陈述。C+在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C+的集成开发环境中完成的。C+相对众多的面向对象的语言,具有相当高的性能。C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C+。(四)QT简介Qt(官方发音同cute发音为/kju:t/,虽然也俗称为Q.T.发音为/kju:ti/)是一个跨平台的C+应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。Qt是一个跨平台的C+图形用户界面库,由挪威TrollTech公司于1995年底出品。Trolltech公司在1994年成立,但是在1992年,成立Trolltech公司的那批程序员就已经开始设计Qt了,Qt的第一个商业版本于1995年推出。42008年1月31日,Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行:Qt商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。Qt开源版:仅仅为了开发自由和开放源码软件,提供了和商业版本同样的功能。GNU通用公共许可证下,它是免费的。2009年3月发布的Qt4.5起,诺基亚为Qt增添开源LGPL授权选择。2009年5月11日起,诺基亚QtSoftware宣布Qt源代码库面向公众开放,Qt开发人员可通过为Qt以及与Qt相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造Qt未来的发展。为了便于这些内容的管理,QtSoftware启用了基于Git和Gitorious开源项目的Web源代码管理系统。Qt专业版和企业版是Qt的商业版本。只有你购买了专业版或企业版,你才能够编写商业的,私人的或收费的软件。如果你购买了这些商业版本,你也可以获得技术支持和升级服务。Qt为微软公司的Windows操作系统只提供了专业版和企业版。5二、嵌入式浏览器分析(一)总体结构Konquerorembedded是由底层网络连接、图形化用户界面和处理HTML绘制的引擎(KHTML)构成的。底层网络连接的实现是基于IOSlave机制来实现的;图形化用户界面采用Kparts组件技术和Qt的基本部件;而作为Konquerorembedded的核心(KHTML)则运用了文档对象模型(DOM)所提供的API接口,并在DOM树上挂接JavaScript引擎,CSS解析器以及渲染引擎等。嵌入式浏览器Konquerorembedded的核心功能模块包括:语法语义解析模块、DOM模块、脚本引擎模块、布局引擎模块和显示模块。模块之间的关系如图2-1所示。图2-1核心功能模块间关系1.语法语义解析模块语法语义解析模块的解析功能分为两部分:对接收到的字节流进行分词,解析为关键字:调用解析器检验关键字是否合法,若是合法的HTML关键字,则按照规则插入到DOM树中。HTML的标记(tag)和属性(attribute)统称为HTML关键字。基本上所有HTML40规范的标记都在此功能模块中获得支持,但一些在DHTML中使用到的属性缺少支持。2.DOM模块DOM模块对经过解析的标记进行文法检查,并把属性看作节点,按照标记的语义包含关系以及先后顺序组织成DOM树。它给HTML文档定义了一个与平台无关的程序接口,使用该接口可以控制文档的内容、接口和样式。3.脚本引擎模块在Konquerorembedded浏览器中,脚本的编写完全按照ECMA262标准,该模块按照ECMA262标准,对HTML对象进行登记,使之成为对象,可以被脚本引擎访问。4.布局引擎模块布局引擎负责把DOM模块形成的DOM树进行排版、布局。5.显示模块6显示模块利用Kparts组件技术和Qt基本构件,负责显示经过布局引擎排版的内容。以上部分在实现的时候,非常灵活,不但可以把联系紧密的模块合并起来成为大的模块,还可以细分为很多小的模块,来完成具体的功能。(2)浏览器总体流程Konquerorembedded的总体流程图2-2如下所示:图2-2浏览器总流程图1.执行IO模块浏览器加载有关的io文件,对HTTP等协议进行解析。2.执行语法语义解析模块从I0模块中接收字节流并进行分词,输出标记,再对标记进行判断,如果是HTML规范中合法的标记,则把标记看作一个节点,并组织成一棵语法树。对属性标记的解析首先在标记处理类中执行,如果解析不成功,则交由基类的属性解析器进行解析。3.执行DOM功能模块在此过程中,浏览器将所有从语法语义解析模块中获得标记和属性按照一定的层次结构组织成DOM树。完成构建DOM树的功能后,DOM模块会同时把标记和属性以对象的形式传给脚本引擎模块。4.执行脚本引擎模块该模块将对从DOM模块传递来的对象进行属性绑定,使脚本引擎可以访问。5.布局引擎模块布局引擎模块将在CSS解析器的辅助下,对HTML文件进行排版、布局。6.执行显示模块显示模块按照在布局引擎中的对HTML文档的布局,显示相应的HTML文档。7(三)图形用户界面GUI和排版显示这是和用户交流的接口,可以根据用户的需求进行适当的配置。包括主窗口、菜单、工具栏、地址栏、状态栏等。在MainWindowBase的基础上进行了图形用户界面的设计和实现。浏览器用户界面结构如图2-3所示。图2-3浏览器用户界面结构图8三、其它浏览器分析(一)Dillo(Gzilla)浏览器分析Gzilla的最新版本改名为Dillo,其模块划分也受了Dillo很大的影响,Dillo浏览器是学习JAVA程序开发的优秀范例,下面就其主要的模块加以说明。1.主函数流程分析主要是对main函数进行分析。java_true();java_init(/*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();/*初始化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_browser_window();/*生成一个browserwindow(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所指向的文件;然后根据文件类型,选择相应的解释器。一个Url所指向的文件可能在本地,也可能在网络上。这节将主要介绍Dillo如何从网上取得文件。模块interface定义了Dillo的图形用户界面。当用户发出一个Url请求时(例如open一个网页),相应的回调函数将调用函数a_Nav_push()。模块Nav中的函数主要是9维护每一个bw中的Url堆栈(bw是BrowserWindow的简写,是浏览器窗口的数据结构)。函数a_Nav_push()的主要功能是将当前的请求记录到bw中的expecting域:bw-nav_expect.url=g_strdup(url);bw-nav_expect.title=NULL;bw-nav_expecting=TRUE;随后,调用函数Nav_open_url()。该函数首先判断请求是否就在当前页中(如anchor就在当前页中),如果是,则直接跳到当前页中指定位置;如果否,调用函数a_Cache_open_url()并修改用户界面(状态条和一些buttons)。模块Cache是Dillo中的关键模块。模块HTTP和模块File负责取得文件,模块Cache负责将取得的各种文件送到不同的解释器;同时模块Cache负责管理缓冲区,缓冲区中存在的文件不需要再通过网络下载。函数a_Cache_open_url()首先搜索缓冲区,判断请求的文件数据是否已经存在;如果存在,调用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请求。Dillo中的DNS请求将由多个线程完成。域名解析完成后,回调函数Http_dns_callback()将被调用。它首先发送Http请求(sendquery);然后接收回答(receiveanswer)。发送、接收操作都是通过调用a_IO_submit()实现的。函数a_IO_submit()通过java的支持,实现了阻塞IO操作。当数据被接收到,回调函数a_Cache_callback()将被调用。函数a_Cache_callback()主要功能是处理接收到的数据,判断文件是否下载完毕。接收到的数据将由函数Cache_process_queue()处理。3.选择合适的解释器函数Cache_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_image()和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)嵌入到窗10口中(bw)。此函数里的操作是基于java的。函数a_Html_text()将会指定Html文件的解释器为Html_Callback().4.Html文件的显示图3-1Html文件的显示图一般Html文件的显示需要经过词法分析、语法分析和布局(layout),显示等几步。在Html显示方面,Dillo处理的比较简单。它在语法分析的同时,进行布局。这里有两个概念:word和line。一个word相当于一个Html文件中的一个tag,若干个word形成一个line,而若干line形成一个page。在语法分析的过程中,发现一个tag,则生成一个word(可能还会生成一个widget,如img),同时进行布局。当一行布满时,一个新的line将会生成。这种处理方式简单,但是具有较大的局限性。Dillo中不支持Table标记就是这种局限性的一种体现。Html_write()函数Html_callback()通过调用Html_write()实现Html文件的分析、布局。Html_write()是对已经下载完毕、还没有处理的一段数据的处理。Html_write()的主要过程是调用a_Dw_page_update_begin()。处理缓冲区中的数据当前字符是空格,而且不在Tag“pre”中处理空格当前字符是“linktexttable-X|text-Xtable_row-X|table_celltable_cell-X|text-XimageX可见,节点之间不仅有先后次序,还有父子关系,正确的语法分析和良好的布局算法,使得ZEN可以支持表格等复杂元素,格式基本正确。关于使用JAVA来支持超级链接的消息响应,第五章已有详细阐述,其参考对象就是ZEN浏览器。让我们记住作者Konfucius的座右铭吧:Therewardofstudying,liesinthestudiesthemselves.14四、嵌入式浏览器模块功能实现(一)浏览器主页界面下图所示为嵌入式浏览器的主页界面,在菜单栏中文件选项中实现新建、打印、退出功能;编辑选项中实现全选功能;查看选项实现转到、停止、刷新功能;工具实现保存功能;帮助实现关于(A)、关于qt功能。在界面上点击前进、后退、跳转、清空、刷新等按钮,来实现其功能。如图4-1所示:图4-1浏览器主页界面关键后台代码:voidBrowserMainWindow:initUi()QWidget*centralWidget=newQWidget(this);setCentralWidget(centralWidget);addressBar=newAddressBarForm;tabWidget=newTabPageWidget;connect(ui-actionNewPage,SIGNAL(triggered(),tabWidget,SLOT(slotNewTab();connect(addressBar,SIGNAL(signalGoBackUrl(),tabWidget,SLOT(slotBack();connect(addressBar,SIGNAL(signalGoForwardUrl(),tabWidget,SLOT(slotForward();connect(addressBar,SIGNAL(signalGoToUrl(constQUrl&),tabWidget,SLOT(slotLoadNewPage(constQUrlconnect(tabWidget,SIGNAL(urlChanged(constQUrl&),addressBar,SLOT(slotAddressChanged(constQUrlQVBoxLayout*mainLayout=newQVBoxLayout;mainLayout-addWidget(addressBar);mainLayout-addWidget(tabWidget);centralWidget-setLayout(mainLayout);15(二)跳转界面下图所示为嵌入式浏览器输入网址进行的跳转界面,在地址输入栏中输入确定的网址,点击跳转按钮,自动跳转所需网址。如图4-2所示:图4-2跳转界面关键后台代码:AddressBarForm:AddressBarForm()deleteui;voidAddressBarForm:initUi()ui-lineEditUrl-setText(/);voidAddressBarForm:createConnections()connect(ui-toolButtonGoToUrl,SIGNAL(clicked(),this,SLOT(slotGoToUrl();connect(ui-lineEditUrl,SIGNAL(returnPressed(),this,SLOT(slotGoToUrl();connect(ui-toolButtonRefreshUrl,SIGNAL(clicked(),this,SLOT(slotGoToUrl();connect(ui-toolButtonClearUrl,SIGNAL(clicked(),this,SLOT(slotClearUrl();connect(ui-toolButtonForwardUrl,SIGNAL(clicked(),this,SIGNAL(signalGoForwardUrl();connect(ui-toolButtonBackUrl,SIGNAL(clicked(),this,SIGNAL(signalGoBackUrl();voidAddressBarForm:slotClearUrl()ui-lineEditUrl-clear();slotRefreshUrl();voidAddressBarForm:slotGoToUrl()QStringaddress=ui-lineEditUrl-text().simplified();if(!address.isEmpty()&!address.contains(http:/)16address=http:/+address;ui-lineEditUrl-setText(address);emitsignalGoToUrl(QUrl(address);voidAddressBarForm:slotRefreshUrl()slotGoToUrl();voidAddressBarForm:slotAddressChanged(constQUrl&newUrl)ui-lineEditUrl-setText(newUrl.toString();(三)浏览器编辑界面下图所示为嵌入式浏览器的编辑工具中的全选界面,点击编辑选项,在其中选取全选按钮,在点击编辑内容。如图4-3所示:图4-3编辑界面关键后台代码:voidTabPageWidget:slotNewTab()QWebView*view=newQWebView;view-page()-setForwardUnsupportedContent(true);view-page()-setLinkDelegationPolicy(QWebPage:DelegateAllLinks);view-page()-action(QWebPage:SelectAll);connect(v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集安市2025-2026学年七年级下学期语文期末模拟试卷
- 2025年度财务人员面试题
- 高速铁路铺轨课件
- 高速铁路无缝线路课件
- 高速消防知识培训班课件
- 电视机相关技术知识培训课件
- 高血糖科普课件
- 高考考点鉴赏边城课件
- 20kV及以下配网工程施工合同
- 电脑办公知识培训班
- 2025-2030中国冷冻榴莲行业供需现状究及未来销售渠道趋势报告
- 统编教材(部编人教版)小学语文四年级上册全册教案教学设计
- 单位向个人借款标准合同文本
- DBJ41T 137-2014 防渗墙质量无损检测技术规程
- 中职高教版(2023)语文职业模块-第一单元1.2宁夏闽宁镇:昔日干沙滩今日金沙滩【课件】
- 《著作权法案例》课件
- 百岁居区域+乐活内外勤宣导材料
- 人教版五年级上册数学期末考试试卷含答案
- 内蒙古职工考勤管理制度
- 肩周炎课件教学课件
- 吉林大学介绍
评论
0/150
提交评论