IPTV机顶盒嵌入式浏览器的设计与实现_第1页
IPTV机顶盒嵌入式浏览器的设计与实现_第2页
IPTV机顶盒嵌入式浏览器的设计与实现_第3页
IPTV机顶盒嵌入式浏览器的设计与实现_第4页
IPTV机顶盒嵌入式浏览器的设计与实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

第18卷第1期牡丹江大学学报Vol.18No.12009年1月JournalofMudanjiangUniversityJan.2009文章编号:1008-8717(2009)01-0107-03IPTV机顶盒嵌入式浏览器的设计与实现李美(牡丹江大学,黑龙江牡丹江157011)摘要:本文主要是根据嵌入式浏览器的需求,对嵌入式浏览器系统进行设计与实现。根据嵌入式浏览器的系统设计,把浏览器分为网络通讯模块、JavaScript解析模块和GUI模块。网络通讯模块负责浏览器与网络的数据交互。JavaScript解析模块负责解析网页。Layout模块负责对解析出来的数据进行布局。GUI模块负责调用图形库函数,将生成的数据在屏幕上显示出来。对嵌入式浏览器的测试结果表明,整个系统达到了预期的所有功能,对JavaScript的支持良好,显示效果与主流桌面浏览器相差不大。关键词:IPTV;嵌入式浏览器;网页解析;JavaScrip;中图分类号:TP39文献标识码:A一、引言近几年,随着数字电视的发展,机顶盒市场迅速崛起。现在的机顶盒系统已经从接收数字电视信号这一单一的功能向具备上网、Flash游戏、电子节目指南等多功能的方向发展。而随着网络技术的迅猛发展,嵌入式浏览器将成为机顶盒系统必不可少的一部分。目前,大部分机顶盒系统都不具备上网功能,而将嵌入式浏览器集成在机顶盒系统中,可以解决这一问题。IPTV机顶盒系统就是集成了嵌入式浏览器的机顶盒系统,它提供了上网功能,解决了用户通过电视机就可以上网的问题。本论文目的在于着眼于IPTV行业的发展趋势。IPTV行业的巨大发展潜力,使得其主要接受解码终端IPTV机顶盒也得到巨大的发展空间。现在,随着网络的发展,网络用户在不断增多。用户遨游网络世界,离不开浏览器。但是针对于普通的用户来说,为了上网而配备一台电脑是不合适的。而对于这种现状,IPTV行业的发展则提供了很好的解决办法,在IPTV机顶盒中集成嵌入式浏览器,提供上网功能。家庭用户购买了IPTV机顶盒设备,成本比购买一台电脑要小得多,却使得普通用户可以通过电视机上网。在集成了嵌入式浏览器后,用户收看电视不再是被动的观看,而是可以按自身意愿选择自己愿意观看的节目,这充分体现了集成了嵌入式浏览器的IPTV机顶盒的互动性。因此,研制与开发IPTV机顶盒嵌入式浏览器,具有重要的实际应用意义。二、解析JavaScript技术在嵌入式浏览器的项目开发中,对于JavaScript的收稿日期:2008-09-07支持也是必不可少的。JavaScript就是适应动态网页制作的需要而诞生的一种新的编程语言,如今越来越广泛地使用于Internet网页制作上。Javascript是由Netscape公司开发的一种脚本语言(scriptinglanguage),或者称为描述语言。在HTML基础上,使用Javascript可以开发交互式Web网页。Javascript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。(一)JavaScript简介JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript,可使网页变得生动。使用它的目的是与HTML超文本标识语言一起实现在一个网页中链接多个对象,与网络客户交互作用,从而可以开发客户端的应用程序。它是通过嵌入或调入在标准的HTML语言中实现的。JavaScript具有很多优点:(1)简单性,JavaScript是一种脚本编写语言,它采用小程序段的方式实现编程,像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个简易的开发过程。(2)动态性,JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。(3)跨平台性,JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可以正确执行。JavaScript加入网页有两种方法:1.直接加入HTML文档这是最常用的方法,大部分含有JavaScript的网页107都采用这种方法,如:<scriptlanguage="Javascript">document.write("这是Javascript!采用直接插入的方法!");</script>在这个例子中,我们可看到一个新的标签:<script>……</script>,而<scriptlanguage="Javascript">用来告诉浏览器这是用JavaScript编写的程序,需要调动相应的解释程序进行解释。在标签<scripr>和</scripr>中的程序就是我们所需要的JavaScript语句。另外一点需要注意的是,<script>……</script>的位置并不是固定的,可以包含在<head></head>或<body></body>中的任何地方。2.引用方式如果已经存在一个Javascript源文件(以js为扩展名),则可以采用这种引用的方式,以提高程序代码的利用率。其基本格式如:<scriptsrc=urllanguage="Javascript"></script>其中的Url就是程序文件的地址。同样的,这样的语句可以放在HTML文档头部或主体的任何部分。如果要实现“直接插入方式”中所举例子的效果,可以首先创建一个Javascript源代码文件“Script.js”,其内容如下:document.writeln("这是Javascript!采用直接插入的方法!");在网页中可以这样调用程序:<scriptsrc="Script.js"language="Javascript"></script>。(二)解析JavaScript技术在分析JavaScript语句的语法结构时发现,嵌入的JavaScript语句都是由用户自定义函数或者采用已经定义好的函数,以及一些变量声明和赋值来组成。而用户自定义函数都是由“function”来定义的。所以在解析过程中,我们把自定义函数的函数名和函数体一起处理,而将另外一些单独的JavaScript语句另外处理。在解析完成后,交由JavaScript引擎处理JavaScript语句,然后JavaScript引擎返回的结果交由JavaScript解析模块处理。在本文中,采用的JavaScript引擎是由Mozilla的SpiderMonkeyJavaScript引擎改进而来的。SpiderMonkey是用C语言实现的JavaScript引擎,功能十分强大,并且对外公开源代码。虽然目前没有针对嵌入式系统的版本,但是针对我们的嵌入式系统对SpiderMonkey进行改造移植,得到了可运行在本文中的嵌入式浏览器中的JavaScript引擎。三、JavaScript解释器设计(一)JavaScript解释器概述JavaScript解释器(下文简称JS解释器)主要用于解析HTML文件中嵌入的JavaScript脚本语言,实现与用户的交互功能。JavaScript解释器是浏览器解析模块功能的扩展,由HTML解析器调用,当HTML解析器在108结构体名序号123成员HTML页面中遇到<script>标签时,即从HTML文档中把JavaScript脚本分离出来,再调用JavaScript解释器对脚本进行解释和执行。在本文中实现对JavaScript的支持,主要是JavaScriptParser模块调用JavaScript引擎的API函数来进行解释、执行。在本文中,采用的JavaScript引擎是由Mozilla的SpiderMonkeyJavaScript引擎改进而来的。SpiderMonkey是用C语言实现的JavaScript引擎,功能十分强大,并且对外公开源代码。虽然目前没有针对嵌入式系统的版本,但是针对我们的嵌入式系统对SpiderMonkey进行改造移植,得到了可运行在本文中的嵌入式浏览器中的JavaScript引擎。(二)JavaScript解释器设计的重点JavaScript解释器的设计重点是如何使用JavaScript引擎解释执行JS语句。一般来说,要在程序中使用JS引擎,首先要在C程序中加入“#includejsapi.h”来确保编译器知道有哪些引擎的API可以调用。然后在应用程序中提供支持结构和变量声明。使用jsapi.h中定义的JS数据类型来声明结构和变量。最后是在程序代码中嵌入合适的JS引擎API调用和变量引用,包括初始化内置JS对象,和创建组成任何应用程序要用的自定义对象。要让应用程序能解释JavaScript,必须遵循某些JSAPI嵌入习惯。大部分情况下,这些函数的插入顺序是很重要的。例如,在调用其他JSAPI之前必须初始化JSRunTime,同样在终止程序之前必须释放JSRunTime。大多数JS引擎调用都会返回一个值。如果这个值是零或者空,它通常表示一个错误的情况发生了。如果值非零,它一般表示成功;在这些情况下,返回的值常常会是你的程序需要使用的指针,或者存起来留以后引用。很重要的是,你的程序至少应该每次检查JS调用返回的值。(三)JavaScript解释器主要数据结构设计关于JS函数的数据结构如表2-1所示。表2-1JS函数数据结构表parse_js_function说明char*js_function_name保存JS函数的函数名char*js_function_body保存JS函数的函数体structparse_js_function*next这样,在页面有事件触发时,根据相应执行的函数名,从parse_js_function中找到一个js_function_name相符的属性,其js_function_body属性即为要执行的JS函数的函数体。至此就实现了从Js函数名到Js函数体的映射。(四)JavaScript解释器的设计HTML解释器共分为两个功能子模块:解析JS语句子模块、处理JS语句子模块。解析标签子模块主要是负责解析嵌入网页中的JS语句,将JS语句存储到恰当数据结构中。处理JS语句子模块主要负责将解析出来JS语句交给JS库进行处理。JS解释器结构图如图2-1所示。创建一个JSPropertySpec数据类型,并把它和属性的信息组装成对象的属性,包括参数的获取(get)和设置(set)方法的名称。创建一个JSFunctionSpec数据类型,并把它和方法的信息组装成对象使用的方法。创建一个实际的C函数用来处理对象的方法调用。调用JS_NewObject或者JS_ConstructObject来实例化这个对象。调用JS_DefineFunctions来创建这个对象的方法。调用JS_DefineProperties来创建这个对象的属性。(七)JavaScript解释器主要函数设计1.parse_js_function*parse_js(void)函数。本函数负责解析JavaScript语句,并将其保存在JS数据结构中。2.parse_js_clean_string(char*string)函数。本函数负责清除字符串中多余的空格字符。3.parse_js_function*parse_js_alloc_function(char*name,char*body)函数。本函数负责存储函数的函数名和函数体。4.parse_js_call_jsengine(char*script)函数。本函数负责解释执行JavaScript语句。5.parse_get_jsfunction(structparse_js_function*jsp,char*name)函数。本函数负责根据相应函数名来获取其对应函数体。四、JavaScript解释器的实现(一)JS解释器的实现JS图2-1JS解释器结构图(五)JavaScript解释器解析JS语句子模块的设计在分析JavaScript语句的语法结构时发现,在嵌入的JavaScript语句都是由用户自定义函数或者采用已经定义好的函数,以及一些变量声明和赋值来组成。而用户自定义函数都是由“function”来定义的。所以在解析时,本文把自定义函数的函数名和函数体存储到一定的数据结构中,在HTML标签中有事件触发这个函数时,将从此数据结构中查找对应的函数。然后交由JS语句处理模块进行处理。而另外一些单独的JavaScript语句将存储到一个字符数组中,然后直接交给JS语句处理模块处理。(六)JavaScript解释器处理JS语句子模块的设计这个模块主要是调用JavaScript引擎的API函数来对JS语句进行解释、执行的。要解释执行JS语句,必须按照下面的顺序调用API函数:1.在浏览器程序中声明全局JS变量,包括RunTimc、一个Context和一个全局对象。2.调用JS_NewRuntime函数API创建并初始化一个JSRunTime(运行时),浏览器应用程序使用的变量、对象和上下文都保存在JSRunTime中,JavaScript解释器利用它来管理上下文、对象和与JS函数及脚本相关的变量。3.调用JS_NewContext函数APl创建并初始化一个上下文(Context),并将其与JSRunTimc关联起来,一个上下文代表一个脚本,引擎传递上下文信息给运行脚本的线程。4.调用JS_NewObject函数API创建并初始化一个全局对象。5.调用JS_InitStandardClasses函数API实例化内置对象和全局对象。6.调用JS_EvaluateScript函数API,将在HTML文档中得到的JavaScript字符串作为参数进行解释执行。7.以上所说的RunTime,Context以及各种对象等,在JavaScript脚本解释执行完后,都需要调用JavaScript引擎的API来进行释放。这样就可以解析JS语句了。当然为了实现更多功能,在本文中将创建自定义的对象。采用的具体方法如下所示:图3-1JS解释器实现流程图当HTML解析器在HTML页面中遇到<script>标签时,即从HTML文档中把JavaScript脚本(下转114页)109就成“死译”了。例如:Insomeautomatedplantselectroniccomputerscontroltheentireproductionline.在某些自动化工厂,电子计算机控制整个生产线。(直译)Manganesehasthesameeffectonthestrengthofsteelassilicon.锰有同样的影响在强度的钢上像硅。(死译)很明显,后句既不忠实原意,又不符合汉语的表达方式。因此,必须运用词类转换、成分转换和语序调整等手段使译文通顺。改译为:锰像硅一样会影响钢的强度。而涉及到具体的翻译实践的时候,科技英语中又有一些具体的翻译方法:1.对于像计量单位、科技发明、材料、化学品名称等这样的技术术语,比如:ohm(欧姆),calorie(卡路里),joule(焦耳),nylon(尼龙),Vaseline(凡士林),micabond(米卡邦德〈一种绝缘材料〉),sonar(声纳),quark(夸克),logic(逻辑),等等采用音译法。2.对于有些技术术语来说,它们既有意译名,又有音译名,二者同时使用。但是我们也可以发现意译逐渐取代着音译。例如:vitamin:维生素(意)/维他命(音)penicillin:青霉素/盘尼西林microphone:话筒/麦克风combine:联合收割机/康拜因3.有些技术术语在翻译中,部分使用音译,部分使(上接109页)分离出来,JS解释器获取JS语句。然后判断是否为函数,如果是的话存储函数到JS数据结构中,生成JS链表等待有调用函数的事件发生时,执行函数。如果不是的话存储单独得JS语句,调用JS引擎解释执行JS语句。五、结论IPTV机顶盒嵌入式浏览器为了适应机顶盒网络化的转变,根据客户需要提供上网这一服务。本文主要完成了IPTV机顶盒嵌入式浏览器系统设计与实现,分析了嵌入式浏览器系统的需求,针对需求对嵌入式浏览器系统进行了系统设计、系统功能设计、系统流程设计、网络通讯模块的设计、HTML解释器的设计、JavaScript解释器的设计、JavaScript解释器实现了嵌入式浏览器对JavaScript的支持,在现今的网页中嵌入了大量JS语句,通过JavaScript的支持,可以实现网页中更多的功能。GUI模块实现了将网页显示出来的作用,GUI界面是直接和用户进行交互的,用户就是通过它来使用浏览器的各种功能的。所以GUI针对不同的用户要提供一个友好、易于操作的界面。这些特点和优点使本文中的嵌入式浏览器已经达到市场上流行的嵌入式浏览器的水平。而且作为自主研发的嵌入式浏览器,在嵌入机顶盒时不必再去购买别的公司的浏览器,使得成本大大降低,在机顶盒市场具备了很强的竞争力。但作为一个新产品,本文在实现中还存114用意译,二者兼顾。例如:topology:拓扑学motorcycle:摩托车ampere2meter:安培表tannic2acid:丹宁酸neonsign:霓虹灯Franklinantenna:弗兰克林天线总之,在科技文体的翻译中,我们应认识到这种特殊文体的特殊性,灵活应变,切不可和普通英语的翻译同一而论。作为翻译者,平时要多注意补充这方面的词汇,了解特殊领域的知识,这将更有利于英汉翻译的顺利进行。参考文献:[1]方梦之.科技翻译理论研究:十年评述与展望[J].中国翻译,1992,(2).[2]黄澄紫.科技英语词汇的统计特征[J].同济大学学报(社会科学版),2002.[3]王泉水.科技英语翻译技巧[M].天津:天津科学出版社,199

温馨提示

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

评论

0/150

提交评论