随着信息技术与网络技术的快速发展,以及人们日常生活对网络信息的需求的不断增加。掌上电脑、上网本、手机、导航仪器、智能电视、智能家电等对嵌入式系统提出了更多更高的要求。在嵌入式系统中利用嵌入式浏览器获取网络信息是必不可少的,因此嵌入式浏览器技术成为现如今的技术热点之一。而且Linux操作系统完全开源,可以降低产品开发成本,因此对基于Linux操作系统的嵌入式浏览器开发技术的研究有着重要意义。

  1嵌入式浏览器的结构

  根据嵌入式浏览器的特点,分析嵌入式浏览器的各个部分功能。下面介绍嵌入式浏览器的主要功能:

  (1)词法分析,主要是对HTML语言进行词法分析,并且要求HTML词法分析可以兼容XML等其他标签语言,达到只需更换语言的元素名称就可以进行词法分析的效果;(2)语法分析与布局,在非嵌入式浏览器中语法分析是独立的一个模块,但是在嵌入式浏览器中不作为一个独立模块,简化系统结构,即实现语法分析与布局同步化,节省了语法分析数据存储的内存空间;(3)嵌入式浏览器的用户界面,设计高效快捷的用户界面是应用软件的重要部分;(4)嵌入式浏览器JavaScript支持,JavaScript在浏览器里主要是用于操纵界面元素并与浏览器内部命令进行结合;(5)I/O端,主要是通过HTTP协议和文本系统来读取页面信息;(6)控制机制,负责命令响应和消息处理。嵌入式浏览器功能结构如图1所示。

图1嵌入式浏览器功能结构图

  2HTML词法分析

  2.1组成及功能

  HTML词法分析是嵌入式浏览器开发的基础,是整个嵌入式浏览器整体设计的最前端部分,HTML词法分析的数据结构是语法分析与布局的重要依据。HTML词法分析的效率、准确率以及容错率的高低在一定程度上决定了整个嵌入式浏览器的工作效率。下面对HTML词法分析的组成和功能进行解析。

  HTML词法分析的功能主要是负责接收从I/O端读取到的HTML代码并进行词法分析,提取网页中HTML代码中的各元素信息,按照定义的数据结构保存元素的属性和名称等,实现数据的结构化。

  根据HTML词法分析的功能可以解析为几个组成部分:(1)初始化。完成对数据结构的初始化,主要是分配内存,变量赋初值;(2)主体的数据流分析,逐字符地进行判断,确定数据的归属类型;(3)元素的分析,提取元素的名称、属性和值域;(4)释放,主要是对数据内存空间的释放。

  2.2算法

  根据HTML词法分析的功能以及组成部分,可以很清晰地得到一个简单的算法。其算法过程具体如下:

  (1)从I/O端读取的字符串流中,顺序读取一个字符;(2)如果遇到<,表示将遇到元素,处理该元素(使用元素处理函数来处理该元素),元素处理结束后,指针指向该元素的尾部;(3)如果遇到空格或回车,则跳过;(4)如果遇到>,则跳过(因为不可能存在<>这种不包含任何元素的情况,只是为了增强程序的容错性);(5)如果遇到的不是上述几种情况,则遇到的是文字(使用文字处理函数来处理该文字),文字处理结束后,指针指向下一个元素的首部;(6)循环(1)~(5)步骤,直到I/O端读取的字符串流全部分析完。

  根据上述词法分析算法过程可以得到相应的流程图,如图2所示。  

图2词法分析算法流程图

  2.3词法分析的设计

  根据上述提出的词法分析的算法,通过扫描I/O端读取的字符串,来检测字符是否为标签元素、提取标签元素属性等。设计词法分析的基础要定义数据结构,为词法分析算法的实现提供基础。根据功能需要设计基本的数据结构,定义如下:

  token[]; // 标签元素表

  * tokenPointer; //指向标签元素表的指针

  chText[]; // 字符表

  *chPointer; // 字符表指针

  text[]; // 字符串表

  *textPointer; // 字符串表指针

  textRead[]; //存放待识别的源程序字符串

  *textReadPointer; //读取字符串指针

  ch; //存放最读取的源程序字符

  STrToken[]; //存放构成单词符号的字符串

  bool flag=false; //是否扫描过一次

  3浏览器JavaScript支持

  3.1JavaScript简介

  JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。它的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。一组包含数据的属性和对属性中包含数据进行操作的方法,称为对象。用户与网页交互时产生的操作,称为事件。事件可以由用户引发,也可能是页面发生改变,甚至还有看不见的事件(如Ajax的交互进度改变)。绝大部分事件都由用户的动作所引发,例如用户按鼠标的按键,就产生click事件,若鼠标的指针在链接上移动,就产生MouseOver事件等。在JavaScript中,事件与事件处理程序配套使用。而对事件的处理用addEventListener()函数,它有3个参数:事件、引发的函数以及是否使用事件捕捉。

  为了保障安全性,将第三个参数始终设置为false。

  JavaScript具有几个特性:能使网页增加互动性;能使有规律地重复的HTML源代码简化,减少下载时间;能及时响应用户的操作,对提交表单做即时的检查,无需浪费额外的验证时间。

  3.2JavaScript引擎

  JavaScript引擎一般作为共享库使用,应用程序调用引擎提供的API函数。引擎API函数大致分为以下几种:数据类型操作、RunTime控制、类与对象的创建和维护、函数与脚本执行、字符串操作、错误处理、安全控制、Debug支持。一般情况下,在应用程序中只需使用某几类函数。例如,在进行JavaScript调用之前必须调用JS_NewRuntime函数来创建并初始化JavaScript引擎。有些类型的函数(像安全控制类)提供可选择的特征。

  JavaScript引擎是系统上的一个共享资源。通过将引擎API调用嵌入到应用程序中,可以请求JavaScript引擎进行操作。引擎处理请求,并将结果或状态信息返回给应用程序。例如,假定使用JavaScript引擎自动化应用程序,脚本应用程序鉴别用户并设置权限。首先,应用程序创建JavaScript对象,该对象描述用户信息,包括姓名、ID、权限和可用的函数列表。在这种情况下,应用程序首先调用JS_NewObject创建对象。当JavaScript引擎创建对象后,返回一个指针给应用程序。应用程序再调用JavaScript引擎执行脚本。在创建用户对象后,应用程序即刻传递脚本给JS_EvaluateScript以便编译和运行。脚本获许取得并校验用户信息,然后建立用户存取的权利。

  JavaScript引擎收到初始化请求后,给JavaScriptRun-Time分配内存,应用程序使用的变量、对象和上下文都保存在RunTime中。一个上下文是脚本的执行状态(JavaScript引擎使用的)。每个同时存在的脚本或线程都必须有自己的上下文。单个的JavaScriptRunTime可以包含多个上下文、对象和变量。几乎所有的JavaScript引擎调用都需要一个上下文变量,应用程序在创建RunTime后,首先应调用至少一次JS_NewCONtext来创建一个上下文。上下文的实际数量依赖于程序中同时使用的脚本数。程序中每个同时存在的脚本都需要一个上下文。另一方面,如果某个时刻只有一个脚本编译和运行,则只需一个上下文给每个脚本重复使用即可。

  3.3JavaScript与浏览器结合

  3.3.1直接加入方式

  绝大部分含有JavaScript代码的网页都采用直接加入的方式。

  

  document.write("This is Javascript! ");

  

  其中,是JavaScript的标签。用来提示浏览器该程序采用JavaScript语言编写,需要调动相应的解释程序进行解释。

  除此之外,还有一个更高版本的嵌入脚本,使用HTML中的CDATA语法,就是把CDATA中的文本全部当作纯文本处理,当遇到CDATA时结束。

  

  <! CDATA[[>

  <! ]]>

  

  3.3.2引用方式

  如果已经存在一个JavaScript源文件(以js为扩展名),则可以采用引用的方式提高程序代码的利用率。其基本格式如下:

  

  

  其中url就是程序文件的地址。

  同样地,这样的JavaScript程序语句可以放在HTML文档头部或主体的任何部分。如果要实现直接加入JavaScript程序代码,可以首先创建一个JavaScript源代码文件“javascript.js,其代码为document.write("This is Javascript!")。在网页中调用程序的方法,如:

  

  

  也可以同时在导入文件时指定JavaScript 的版本,如:

  

  

  本文对Linux操作系统的嵌入式浏览器进行了研究与分析。分析了嵌入式浏览器的结构,并对嵌入式浏览器的各部分功能进行阐述,其中包括词法分析、语法分析与布局、浏览器JavaScript支持、I/O端等部分。其中,在嵌入式浏览器的研究过程中,词法分析的算法是开发技术的核心。在后续研究工作中,可以对词法分析算法做进一步的研究,提高词法分析的效率,完善嵌入式浏览器功能实现的效果。

养成励志的习惯,一生励志

22本经典英语口语教程  

技术开发海量资料下载导航

30本经典Linux学习和开发教程和资料 

15本经典C、C++、MFC、VC++教程

10本经典Java教程

15本经典Android教程和海量Android源码

转载于:https://www.cnblogs.com/javaTest/archive/2012/02/05/2589288.html

基于Linux的嵌入式浏览器的实现相关推荐

  1. 基于linux嵌入式浏览,基于Linux的嵌入式浏览器的实现

    摘要: 在嵌入式产品中利用嵌入式浏览器获得网络信息是必不可少的,所以嵌入式浏览器技术成为技术热点之一,发展是必然趋势.嵌入式浏览器具有速度快,实时性强,可移植性高,体积小和资源消耗低等特点,更有利于人 ...

  2. linux 嵌入式串口通信设计目的,基于linux的嵌入式串口通信.doc

    PAGE 天津电子信息职业技术学院 <嵌入式软件编程>课程报告 课程名称:基于linux的嵌入式串口通信 课程代码: 115229 姓 名: 甘琦 学 号: 48 专 业: 物联网应用技术 ...

  3. 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...

    描述 1.前言 随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用.工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点.随着32位嵌入式CPU价格 ...

  4. linux 嵌入式串口通信,基于linux的嵌入式串口通信综述.doc

    PAGE 天津电子信息职业技术学院 <嵌入式软件编程>课程报告 课程名称:基于linux的嵌入式串口通信课程代码: 115229 姓 名: 甘琦 学 号: 48 专 业: 物联网应用技术 ...

  5. linux 嵌入式 播放器,基于Linux的嵌入式媒体播放器研究

    摘要: 计算机多媒体技术和嵌入式技术的高速发展,各种集计算机.通信.消费电子产品等特征于一体的电子产品得以广泛应用,嵌入式媒体播放器已经成为此类产品中主要的应用软件.同时,随着Linux系统在各种嵌入 ...

  6. [看门狗]基于Linux的嵌入式系统全程喂狗策略

    https://www.cnblogs.com/aaronLinux/p/8073898.html https://github.com/aaronRong [看门狗]基于Linux的嵌入式系统全程喂 ...

  7. linux 嵌入式 快照_基于Linux的嵌入式启动优化的研究

    基于Linux的嵌入式启动优化的研究 论文 开题分析 周报 启动 基于Linux嵌入式系统启动加速的研究 一. 所选课题的目的和意义 随着科学技术的蓬勃发展,计算机被更多的人使用,并与人类对额生活结合 ...

  8. linux 远程挂载摄像头_基于Linux的嵌入式网络摄像机设计

    本嵌入式网络摄像机采用高性能ARM9芯片微处理器,内置嵌入式Web服务器. 通过嵌入式多任务操作系统采集摄像机视频数据:采集的视频信号数字化后经MJPEG算法压缩,再通过内部总线送到内置的Web服务器 ...

  9. 基于linux的嵌入式internet应用程序,基于Linux的嵌入式Internet应用(含项目代码)

    摘    要 随着计算机技术的发展,嵌入式系统也越来越广泛的被应用于工业控制,信息家电和个人通信设备等方面.如果能把嵌入式终端像PC一样接入Internet,就可以方便.低廉的对嵌入式设备进行访问和控 ...

最新文章

  1. 科大讯飞2019年创下历史最佳业绩,员工涨薪27%,营收来源妥妥「安徽之光」
  2. java面试怎样成功率高一些_java初学者参加面试怎样提高成功率?
  3. CodeForces 176A Trading Business 贪心
  4. JDK和Spring中的设计模式
  5. 国家杰出青年入选者分析:北大最多,深大成“黑马”
  6. Spring boot(6) 数据访问
  7. ubuntu 配置桥接网卡_KVM之配置桥接网卡
  8. 清华大学开源用于网络嵌入的工具包 OpenNE
  9. Java是否存在内存泄露
  10. 通过《Java核心编程》探索程序设计
  11. SPSS:因子分析步骤
  12. gsp计算机管理系统,速拓医药GSP管理系统pc版
  13. SpringAOP:连接点和切点的区别
  14. 微信小程序 云开发 欢迎登录注册
  15. 分子动力学模拟之SETTLE约束算法
  16. Excel应用技巧之一——常用快捷键
  17. 宗地权属图生成的解决方案设计
  18. 企业网站[正能量系列]失业的程序员(一)
  19. VHDL数字频率计的设计
  20. python爬取图片打开显示 “似乎不支持此文件格式”

热门文章

  1. html5中preclass,为什么HTML5建议把代码元素放在pre?
  2. append有时加载不出来_关于艾拉浏览器看漫画,有时加载慢的解决方法,你知道了吗...
  3. spring生命周期_理解Spring应用上下文生命周期
  4. linux shell 等待输入_linux运维——基础篇
  5. Windows和VMware虚拟机相互间无法复制的解决方案
  6. python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)
  7. matlab算线性方程解,MATLAB计算方法3解线性方程组计算解法.pptx
  8. oracle 加全文索引,oracle全文索引的创建和使用
  9. java httpclient post 上传文件_httpclient通过post multipart/form-data 上传文件
  10. python 接口测试 如何写配置文件_python接口自动化测试二十九:yaml配置文件的写和读...