CN101539859B - 一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法 - Google Patents
一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法 Download PDFInfo
- Publication number
- CN101539859B CN101539859B CN2008101990677A CN200810199067A CN101539859B CN 101539859 B CN101539859 B CN 101539859B CN 2008101990677 A CN2008101990677 A CN 2008101990677A CN 200810199067 A CN200810199067 A CN 200810199067A CN 101539859 B CN101539859 B CN 101539859B
- Authority
- CN
- China
- Prior art keywords
- label
- layer
- browser
- plug
- embedded
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供一种基于uCLinux的嵌入式Konqueor浏览器的插件开发方法,利用嵌入式Konqueror浏览器的基本设计框架和基于KParts技术的集成方式,把需要扩展的功能封装成Part插入到浏览器中,将Part中易变的、可复用的和功能性强的部分从Part中分离出来,形成一个Lib层,进而构成一个插件开发模型。本发明提高了对嵌入式浏览器的功能扩展的效率和灵活性。
Description
技术领域
本发明属于嵌入式环境下的浏览器设计与开发领域,特别是涉及一种基于uCLinux操作系统的嵌入式Konqueror浏览器的插件开发方法。
技术背景
随着嵌入式技术和设备的应用领域越来越广泛,在嵌入式环境中的Web功能也越来越收到人们的关注,因此,嵌入式浏览器的需求便越来越迫切了。目前国内外嵌入式浏览器有许多种,比如微软的嵌入式IE、ACCESS的NF等等,但是大多数都是基于X86的体系结构。但是目前嵌入式领域中,基于ARM特别是ARM7的嵌入式应用还是占了相当的一部分,而基于它们的嵌入式浏览器却非常少,其中功能完备、运行稳定的几乎没有。
本发明选择基于Linux的Konqueror/Embedded开源项目作为研究起点,将其成功地移植到了基于ARM7体系结构的uCLinux平台下。但是,由于需要跟上网络的发展,如何扩展嵌入式浏览器的功能成为一个很有必要研究的问题。插件技术对于解决这个问题是非常重要的,但是有关嵌入式浏览器的插件开发方法,尤其是基于无MMU支持的uCLinux平台的嵌入式浏览器的插件开发,国内外都很少有相关方面的研究。本发明的目的就是为了提出一种基于uCLinux的Konqueror/Embedded浏览器的插件开发方法,用于提高对嵌入式浏览器的功能扩展的效率和灵活性。
发明内容
本发明的目的在于提高嵌入式浏览器的扩展能力,提供一种基于uCLinux平台的嵌入式Konqueror浏览器的插件开发方法。
为了实现上述发明目的,采用的技术方案如下:
一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法,利用嵌入式Konqueror浏览器的基本设计框架和基于KParts技术的集成方式,把需要扩展的功能封装成Part插入到浏览器中,其特点在于将Part中易变的、可复用的和功能性强的部分从Part中分离出来,形成一个Lib层,进而构成一个插件开发模型。
所述插件开发模型分为三层,自上而下依次为KHTMLPart层、Part层和Lib层。KHTMLPart层是该类型浏览器的核心Part,利用其对Part可以嵌套的特性,将其建立在Part之上,但由于分离出了Lib层,故和旧形式的Part有了本质的不同。最下层即为Lib层,在该模型中,它是承担插件主要功能的软件层,为Part层提供调用接口,实现插件需要为浏览器扩展的功能。
所述Lib层设置有和Part层交互的标签解析模块,所述标签解析模块所解析的标签包括定义标签和控制标签,标签解析模块对定义标签和控制标签进行解析,并生成新的解码标签放入自己维护的字典中,所述解码标签包括角色标签和动作标签,对应的字典为角色字典和动作字典。
所述Lib层设置有和硬件活底层驱动交互的执行引擎模块,所述执行引擎模块遍历动作标签,将动作标签划分为行为标签和渲染标签。
本发明的插件开发模型对应的插件为Flash插件。
本发明利用三层模型作为基于uCLinux的嵌入式Konqueror浏览器的完整的插件开发方法,可以有效地在嵌入式环境中为浏览器扩展功能。
附图说明
图1为嵌入式Konqueror浏览器的基本框架图;
图2为本发明的插件开发模型结构示意图;
图3为Lib模块结构示意图;
图4为标签解析示意图;
图5为执行引擎执行示意图。
具体实施方式
下面结合附图以及以实现的一个基于uCLinux的嵌入式Konqueror浏览器的Flash插件为例对本发明做进一步的说明。
本发明提出的基于uCLinux的嵌入式Konqueror浏览器的三层插件开发模型基于KParts技术。移植并实现的基于uCLinux的嵌入式Konqueror浏览器修改并实现了最初用于KDE环境下的KParts机制,并且将该技术作为整合整个浏览器的核心,因此很容易地使用该机制来加载和卸载Part。该浏览器的基本框架示意图如图1所示。
在无MMU支持的uCLinux平台上实现基于嵌入式Konqueror框架的浏览器所面临的问题有多种,除了修改嵌入式Konqueror浏览器的代码让其适应特定的嵌入式环境以外,还必须跟上不断发展的网络技术和网络标准,所以不可避免地要通过插件技术来扩展浏览器的功能。本发明提出的三层模型的插件开发方法正是为了解决这个问题,它基于上述的KParts技术和软件重用的思想。该模型的示意图如附图2所示。
在模型的上端是KHTMLPart部件,也是整个浏览器的核心。本发明利用KParts框架的可扩展性,将其作为插件开发的平台。
中间层为Part层。本发明将插件的概念用传统的Part来表达,并且将传统的Part分为模型中的Part和Lib层。由于网络协议和网络标准的不断发展,传统的Part插件需要进行不断的更新,所以把易变的代码从Part中分离出来,组成一个或者多个Lib,从而构成一个Lib层。于是中间层Part和传统的旧Part从形式上和功能上便完全不同。传统的Part拥有自己的可视控件、功能实现和用户接口。而本发明中的Part除了提供基本的UI功能外,主要还是作为浏览器和Lib之间的中间层而存在的,负责它们之间的通信和交互。
以发明人用该模型实现的Flash插件为例,该模型中的Part在Flash插件中所起的作用便是沟通Lib和浏览器。由于无MMU平台不支持多进程,而且Part的作用决定了它与主线程的交互会相当的频繁,而与数据下载所需的时间相比,渲染页面所需的时间是可以忽略的,所以将浏览器用多线程来实现,并且将Part与主线程整合在一起。Part充分利用了Qt/Embedded的Signal-Slot机制来进行时间响应。与Part相关的工作可以描述为:
1)主线程启动Dom&Render引擎,将下载完成的页面数据交付它们进行解析。当引擎从页面数据中了解到有flash元素存在的时候,便通知KHTMLPart部件,创建Flash插件的Part实例。
2)Flash插件的Part启动浏览器的下载部件KIO模块,对该flash文件进行下载。KIO下载完成后,通知Part。
3)Part将下载完的数据传递给Lib,后者用这些数据完成它的工作。
在这个过程中,Part实际上是一个协调Lib和浏览器以及传递数据的角色。当然,除此之外,开发插件的时候同样也可以根据需要给Part其它的职责。比如在Flash插件中,Part还起到控制Lib进行flash播放的作用。由于flash文件可能会比较大,而对于无MMU支持的嵌入式环境下,很容易引起堆栈溢出等致命错误,因此Part协调各方面工作,使得一次传递给Lib一小块数据。而当Lib通知Part解析完了flash文件之后,Part停止下载,并且设定计时器定时对flash进行循环播放。
Part除了作为信息和数据的传递者之外,对于嵌入式开发来说,还有一个更重要的功能。浏览器插件本身应该是一个功能比较独立、可以在不同浏览器之间进行方便地移植的软件模块。本发明提出的插件开发三层模型中,由于主要功能由Lib实现,故Part还可以作为一个adapter层而存在,使得插件能够适应不同宿主浏览器的接口要求,从而可以方便地进行跨浏览器的移植。
处于三层模型底层的是Lib层。它是从Part中划分出来的由易变的、功能性强的以及可复用的代码组成的比较独立的模块,实现了插件的主要功能。尤其在嵌入式环境中,它向上同Part进行交互,向下同硬件或底层驱动进行相关的操作。
同样用实现的Flash插件为例。对flash文件进行分析后知道,flash文件遵循SWF文件格式,故Lib的主要功能是分离和分类标签,并且渲染它们的内容。所以Lib被分为两个模块:标签解析模块Tag Parser和执行引擎Execute Engine。模块图如附图3所示。
Tag Parser是和上层Part交互的主要模块。这里引入一些定义来区分不同的flash标签:定义标签和控制标签,前者定义一个播放对象,后者控制播放的动作和流程。它解析并且用这些标签生成新的解码标签放入自己维护的字典中。这些解码标签分别被称为角色标签和动作标签,对应的字典便是角色字典和动作字典。标签解析的示意图如图4所示。
角色字典存在于每一层flash中,而动作字典则存在于每一层的每一帧中。当从Part接收到以Unicode字符流形式输入的flash文件后,解析器开始从文件体中分离和分类标签,将它们解码成解码标签并放入相应的字典中。如在图4中所示,文件体中存在一个定义标签为stagDefineSound类型。如果解析器得到这个标签,将会调用相应的函数生成一个Sound类型的角色对象,并且用由标签头所指示的文件体中相应的数据将该对象填充,然后包装成角色标签,放入角色字典中。对于控制标签而言,比如得到一个类型为stagStartSound的控制标签,解析器会调用相应的函数生成一个动作标签并且将该动作所操作的角色记录下来,放入动作字典中。当解析器处理完文件体中的所有标签后,标签解析的过程就算完成了。从对该模块简单的介绍中我们可以看到,Lib通过这一模块同Part进行着数据的交互,不断从Part中读取数据并进行解析。
在Tag Parser下面是Execute Engine。在Tag Parser解析完flash文件之后,Execute Engine开始渲染flash文件。它为每一层flash定义一个播放列表来维护准备被渲染的角色对象。执行引擎的工作工程可以简洁地描述为遍历动作标签的过程。如图5所示。为了将这个遍历的过程解释清楚,将动作标签又作出划分,分为行为标签和渲染标签。行为标签控制flash影片的播放流程。当引擎从动作字典中将行为标签释放出来时,它调用相应的处理函数进行处理。比如,当得到一个一个类型为ctrlStartSound的行为标签时,它调用底层的声音播放设备进行声音的播放。而渲染标签代表一个准备被播放的角色。拿类型为ctrlPlaceObject为例,当引擎拿到这个标签时,它将该标签中记录的处于角色字典中的角色对象放入相应层的播放列表中。当引擎处理完动作字典之后,便开始对每一层flash的播放列表进行扫描并且渲染其中记录的角色对象。考虑嵌入式环境的效率重要性,渲染的过程均需要和视频、音频设备进行交互。
在三层模型中,Lib负责的是实现插件的功能。Lib独立地实现了Flash插件的应有的功能,而且对于Part和底层来说,是完全透明的,只需知道Lib的应用接口。这样的设计也有利于对Lib进行模块的划分。
将Lib从传统形式的Part中划分出来,给基于uCLinux的嵌入式Konqueror浏览器插件开发带来了很多益处。如果整个插件需要彻底更新,也无需对Part进行修改,仅仅对Lib进行修改即可;由于Lib的功能相对比较独立,所以不同的Part可以使用相同的Lib,或者同一个Part可以同时使用多个Lib来组合完成一个插件的功能,这样一来,对于插件的设计便不应该单单停留在实现功能之上,还应该考虑功能上的可复用性、接口的通用性、功能划分的独立性以及可重入等问题,以便插件之间可以共享Lib,减少代码的冗余度,从而可以节省有限的嵌入式资源。
该模型基于KParts技术,而其一大特点便是可以动态地加载和卸载Part。当一个插件不再需要的时候,可以把它卸载掉,但如果它所提的很少数但很有用的插件功能仍然正被使用,那么就不得不将整个的插件保留起来,没办法对内存的使用进行优化。而将插件的功能从插件本身中划分出来成为组成插件的一个或多个相对独立的部分,即Lib,则Part的卸载并不影响插件的功能被使用。这样对于嵌入式浏览器这样一个对内存消耗相对较大的嵌入式应用来说,无疑是十分有益的。
Claims (4)
1.一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法,利用嵌入式Konqueror浏览器的设计框架和基于KParts技术的集成方式,把需要扩展的功能封装成Part插入到浏览器中,其特征在于将Part分离为Part层和Lib层,进而构成一个插件开发模型,所述插件开发模型分为三层,自上而下依次为KHTMLPart层、Part层和Lib层,KHTMLPart层是浏览器的核心Part,建立在Part层之上,最下层即为Lib层,Lib层是承担插件主要功能的软件层,为Part层提供调用接口,实现插件需要为浏览器扩展的功能。
2.根据权利要求1所述的基于uCLinux的嵌入式Konqueror浏览器的插件开发方法,其特征在于插件开发模型对应的插件为Flash插件。
3.根据权利要求2所述的基于uCLinux的嵌入式Konqueror浏览器的插件开发方法,其特征在于所述Lib层设置有和Part层交互的标签解析模块,所述标签解析模块所解析的标签包括定义标签和控制标签,标签解析模块对定义标签和控制标签进行解析,并生成新的解码标签放入自己维护的字典中,所述解码标签包括角色标签和动作标签,对应的字典为角色字典和动作字典。
4.根据权利要求3所述的基于uCLinux的嵌入式Konqueror浏览器的插件开发方法,其特征在于所述Lib层设置有和硬件或底层驱动交互的执行引擎模块,所述执行引擎模块遍历动作标签,将动作标签划分为行为标签和渲染标签。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101990677A CN101539859B (zh) | 2008-10-10 | 2008-10-10 | 一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101990677A CN101539859B (zh) | 2008-10-10 | 2008-10-10 | 一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101539859A CN101539859A (zh) | 2009-09-23 |
CN101539859B true CN101539859B (zh) | 2011-12-07 |
Family
ID=41123061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101990677A Expired - Fee Related CN101539859B (zh) | 2008-10-10 | 2008-10-10 | 一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101539859B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102081709B (zh) * | 2009-12-01 | 2017-05-24 | 联想(北京)有限公司 | 一种浏览器插件的禁用方法、装置和终端 |
CN102495890A (zh) * | 2011-12-09 | 2012-06-13 | 上海全景数字技术有限公司 | 嵌入式浏览器应用扩展系统及方法 |
CN103064663B (zh) * | 2012-11-19 | 2016-03-09 | 北京百度网讯科技有限公司 | 浏览器插件的生成、发布、加载和更新方法以及系统 |
CN103023976B (zh) * | 2012-11-19 | 2016-08-03 | 北京奇虎科技有限公司 | 一种浏览器应用插件扩展的装置和方法 |
CN102999337A (zh) * | 2012-11-20 | 2013-03-27 | 上海中信信息发展股份有限公司 | 浏览器封装系统及方法 |
CN103077023B (zh) * | 2012-12-27 | 2017-05-17 | 北京思特奇信息技术股份有限公司 | 基于Flex主应用制作JSP插件的方法及装置 |
US9710509B2 (en) | 2013-06-26 | 2017-07-18 | Verizon Patent And Licensing Inc. | Image decoding method and apparatus for browser |
CN104360834B (zh) * | 2014-10-10 | 2018-01-26 | 惠州市德赛西威汽车电子股份有限公司 | 一种车载嵌入式系统复用第三方插件的方法 |
CN107463395B (zh) * | 2016-06-03 | 2020-10-09 | 腾讯科技(深圳)有限公司 | 组件调用方法及装置 |
CN112118285B (zh) * | 2020-07-31 | 2022-05-20 | 山东鲁能软件技术有限公司 | 适用于客户端全版本浏览器的数据传输方法及系统 |
CN112035097B (zh) * | 2020-08-25 | 2023-10-13 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于银河锐华操作系统的c++适配层的装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101271389A (zh) * | 2008-04-08 | 2008-09-24 | 江苏科技大学 | 嵌入式藏文智能信息处理方法 |
-
2008
- 2008-10-10 CN CN2008101990677A patent/CN101539859B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101271389A (zh) * | 2008-04-08 | 2008-09-24 | 江苏科技大学 | 嵌入式藏文智能信息处理方法 |
Non-Patent Citations (1)
Title |
---|
庾锡昌.Tops嵌入式浏览器的设计与实现.《中国优秀硕士学位论文全文数据库》.2007,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN101539859A (zh) | 2009-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101539859B (zh) | 一种基于uCLinux的嵌入式Konqueror浏览器的插件开发方法 | |
CN100421375C (zh) | 数据共享系统及方法 | |
Doe et al. | Developing Sherpa with Python | |
CN100549957C (zh) | 一种类装载隔离的方法及一种类装载隔离的装置 | |
WO2003065173A3 (en) | A system and method for managing knowledge | |
CN102356380A (zh) | 具有可扩展媒体格式的托管应用程序平台 | |
CN101593127A (zh) | 一种数字电视中间件系统的跨平台Jave虚拟机 | |
CN101322096A (zh) | 元数据驱动的用户界面 | |
CN105391985A (zh) | 一种基于嵌入式Linux的视频监控系统与方法 | |
CN102289834A (zh) | 一种微动画编辑器及其编辑方法 | |
CN103268337A (zh) | 一种网页中视频的播放方法和装置 | |
CN100517222C (zh) | 支持转换引擎与映射规则相分离的模型转换装置及其方法 | |
CN102929971A (zh) | 一种多媒体信息播放方法和系统 | |
CN111158690A (zh) | 桌面应用框架、构建方法、桌面应用运行方法及存储介质 | |
CN101729753A (zh) | 一种java应用中加载图片的方法和装置 | |
CN102364442A (zh) | 将Wine从x86移植到ARM平台的方法 | |
CN102799444A (zh) | 跨平台打包程序的方法及装置 | |
CN105210050A (zh) | 用于呈现超文本标记语言页的装置和方法 | |
CN101789944B (zh) | 多功能电能表通信协议栈的开发系统 | |
CN103176838A (zh) | 兼容Android本机程序的方法及系统 | |
CN112181432A (zh) | ReactNative框架中实现bundle的模块化打包处理的系统 | |
CA2465626A1 (en) | Program security through stack segregation | |
CN101753793A (zh) | 在嵌入式机顶盒系统中实现交互界面的方法 | |
CN102222001A (zh) | 环境部署装置和环境部署方法 | |
CN103631645A (zh) | 一种基于数字医疗的数字家庭中间件系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111207 Termination date: 20201010 |
|
CF01 | Termination of patent right due to non-payment of annual fee |