<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Linux 的嵌入式瀏覽器的研究

基于Linux 的嵌入式瀏覽器的研究

作者: 時(shí)間:2012-02-03 來(lái)源:網(wǎng)絡(luò ) 收藏

隨著(zhù)信息技術(shù)與網(wǎng)絡(luò )技術(shù)的快速發(fā)展, 以及人們日常生活對網(wǎng)絡(luò )信息的需求的不斷增加。掌上電腦、上網(wǎng)本、手機、導航儀器、智能電視、智能家電等對系統提出了更多更高的要求。在系統中利用獲取網(wǎng)絡(luò )信息是必不可少的, 因此嵌入式技術(shù)成為現如今的技術(shù)熱點(diǎn)之一。而且 操作系統完全開(kāi)源, 可以降低產(chǎn)品開(kāi)發(fā)成本, 因此對 操作系統的嵌入式開(kāi)發(fā)技術(shù)的有著(zhù)重要意義。

本文引用地址:http://dyxdggzs.com/article/149794.htm

1 嵌入式瀏覽器的結構

根據嵌入式瀏覽器的特點(diǎn), 分析嵌入式瀏覽器的各個(gè)部分功能。下面介紹嵌入式瀏覽器的主要功能:

(1) 詞法分析, 主要是對HTML 語(yǔ)言進(jìn)行詞法分析, 并且要求HTML 詞法分析可以兼容XML 等其他標簽語(yǔ)言,達到只需更換語(yǔ)言的元素名稱(chēng)就可以進(jìn)行詞法分析的效果;(2) 語(yǔ)法分析與布局, 在非嵌入式瀏覽器中語(yǔ)法分析是獨立的一個(gè)模塊, 但是在嵌入式瀏覽器中不作為一個(gè)獨立模塊, 簡(jiǎn)化系統結構, 即實(shí)現語(yǔ)法分析與布局同步化, 節省了語(yǔ)法分析數據存儲的內存空間; (3) 嵌入式瀏覽器的用戶(hù)界面, 設計高效快捷的用戶(hù)界面是應用軟件的重要部分;(4) 嵌入式瀏覽器JavaScript 支持,JavaScript 在瀏覽器里主要是用于操縱界面元素并與瀏覽器內部命令進(jìn)行結合;(5)I/O 端, 主要是通過(guò)HTTP 協(xié)議和文本系統來(lái)讀取頁(yè)面信息;(6) 控制機制, 負責命令響應和消息處理。嵌入式瀏覽器功能結構如圖1 所示。

圖1 嵌入式瀏覽器功能結構圖

圖1 嵌入式瀏覽器功能結構圖

2 HTML 詞法分析

2.1 組成及功能

HTML 詞法分析是嵌入式瀏覽器開(kāi)發(fā)的基礎, 是整個(gè)嵌入式瀏覽器整體設計的最前端部分,HTML 詞法分析的數據結構是語(yǔ)法分析與布局的重要依據。HTML詞法分析的效率、準確率以及容錯率的高低在一定程度上決定了整個(gè)嵌入式瀏覽器的工作效率。下面對HTML詞法分析的組成和功能進(jìn)行解析。

HTML 詞法分析的功能主要是負責接收從I/O 端讀取到的HTML 代碼并進(jìn)行詞法分析, 提取網(wǎng)頁(yè)中HTML代碼中的各元素信息, 按照定義的數據結構保存元素的屬性和名稱(chēng)等, 實(shí)現數據的結構化。

根據HTML 詞法分析的功能可以解析為幾個(gè)組成部分:(1) 初始化。完成對數據結構的初始化, 主要是分配內存, 變量賦初值; (2) 主體的數據流分析, 逐字符地進(jìn)行判斷, 確定數據的歸屬類(lèi)型; (3) 元素的分析, 提取元素的名稱(chēng)、屬性和值域; (4) 釋放, 主要是對數據內存空間的釋放。

2.2 算法

根據HTML 詞法分析的功能以及組成部分, 可以很清晰地得到一個(gè)簡(jiǎn)單的算法。其算法過(guò)程具體如下:

(1)從I/O 端讀取的字符串流中,順序讀取一個(gè)字符;(2) 如果遇到 , 表示將遇到元素, 處理該元素( 使用元素處理函數來(lái)處理該元素) , 元素處理結束后, 指針指向該元素的尾部;(3) 如果遇到空格或回車(chē), 則跳過(guò);(4) 如果遇到>, 則跳過(guò)(因為不可能存在>這種不包含任何元素的情況, 只是為了增強程序的容錯性);(5) 如果遇到的不是上述幾種情況, 則遇到的是文字( 使用文字處理函數來(lái)處理該文字) , 文字處理結束后,指針指向下一個(gè)元素的首部;(6) 循環(huán)(1)~(5 ) 步驟, 直到I/O 端讀取的字符串流全部分析完。

根據上述詞法分析算法過(guò)程可以得到相應的流程圖, 如圖2 所示。

圖2 詞法分析算法流程圖

圖2 詞法分析算法流程圖

2.3 詞法分析的設計

根據上述提出的詞法分析的算法, 通過(guò)掃描I/O 端讀取的字符串, 來(lái)檢測字符是否為標簽元素、提取標簽元素屬性等。設計詞法分析的基礎要定義數據結構, 為詞法分析算法的實(shí)現提供基礎。根據功能需要設計基本的數據結構, 定義如下:

  char token[]; // 標簽元素表

  char * tokenPointer; //指向標簽元素表的指針

  char chText[]; // 字符表

  char *chPointer; // 字符表指針

  char text[]; // 字符串表

  char *textPointer; // 字符串表指針

  char textRead[]; //存放待識別的源程序字符串

  char *textReadPointer; //讀取字符串指針

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

  char STrToken[]; //存放構成單詞符號的字符串

  bool flag=false; //是否掃描過(guò)一次

3 瀏覽器JavaScript 支持

3.1 JavaScript 簡(jiǎn)介

JavaScript 是一種對象和事件驅動(dòng)并具有相對安全性的客戶(hù)端腳本語(yǔ)言。它的一個(gè)重要功能就是面向對象的功能, 通過(guò)對象的程序設計, 可以用更直觀(guān)、模塊化和可重復使用的方式進(jìn)行程序開(kāi)發(fā)。一組包含數據的屬性和對屬性中包含數據進(jìn)行操作的方法, 稱(chēng)為對象。用戶(hù)與網(wǎng)頁(yè)交互時(shí)產(chǎn)生的操作, 稱(chēng)為事件。事件可以由用戶(hù)引發(fā), 也可能是頁(yè)面發(fā)生改變, 甚至還有看不見(jiàn)的事件( 如Ajax 的交互進(jìn)度改變) 。絕大部分事件都由用戶(hù)的動(dòng)作所引發(fā), 例如用戶(hù)按鼠標的按鍵, 就產(chǎn)生click 事件, 若鼠標的指針在鏈接上移動(dòng), 就產(chǎn)生MouseOver 事件等。在JavaScript 中, 事件與事件處理程序配套使用。而對事件的處理用addEventListener() 函數, 它有3 個(gè)參數: 事件、引發(fā)的函數以及是否使用事件捕捉。

為了保障安全性, 將第三個(gè)參數始終設置為false。

JavaScript 具有幾個(gè)特性: 能使網(wǎng)頁(yè)增加互動(dòng)性; 能使有規律地重復的HTML 源代碼簡(jiǎn)化, 減少下載時(shí)間;能及時(shí)響應用戶(hù)的操作, 對提交表單做即時(shí)的檢查, 無(wú)需浪費額外的驗證時(shí)間。

3.2 JavaScript 引擎

JavaScript 引擎一般作為共享庫使用, 應用程序調用引擎提供的API 函數。引擎API 函數大致分為以下幾種: 數據類(lèi)型操作、RunTime 控制、類(lèi)與對象的創(chuàng )建和維護、函數與腳本執行、字符串操作、錯誤處理、安全控制、Debug 支持。一般情況下, 在應用程序中只需使用某幾類(lèi)函數。例如, 在進(jìn)行JavaScript 調用之前必須調用JS_NewRuntime 函數來(lái)創(chuàng )建并初始化JavaScript 引擎。有些類(lèi)型的函數(像安全控制類(lèi))提供可選擇的特征。

JavaScript 引擎是系統上的一個(gè)共享資源。通過(guò)將引擎API 調用嵌入到應用程序中, 可以請求JavaScript 引擎進(jìn)行操作。引擎處理請求, 并將結果或狀態(tài)信息返回給應用程序。例如, 假定使用JavaScript 引擎自動(dòng)化應用程序, 腳本應用程序鑒別用戶(hù)并設置權限。首先, 應用程序創(chuàng )建JavaScript 對象, 該對象描述用戶(hù)信息, 包括姓名、ID、權限和可用的函數列表。在這種情況下, 應用程序首先調用JS_NewObject 創(chuàng )建對象。當JavaScript 引擎創(chuàng )建對象后, 返回一個(gè)指針給應用程序。應用程序再調用JavaScript 引擎執行腳本。在創(chuàng )建用戶(hù)對象后, 應用程序即刻傳遞腳本給JS_EvaluateScript 以便編譯和運行。腳本獲許取得并校驗用戶(hù)信息, 然后建立用戶(hù)存取的權利。

JavaScript 引擎收到初始化請求后,給JavaScript Run-Time 分配內存, 應用程序使用的變量、對象和上下文都保存在RunTime 中。一個(gè)上下文是腳本的執行狀態(tài)(JavaScript 引擎使用的) 。每個(gè)同時(shí)存在的腳本或線(xiàn)程都必須有自己的上下文。單個(gè)的JavaScript RunTime 可以包含多個(gè)上下文、對象和變量。幾乎所有的JavaScript 引擎調用都需要一個(gè)上下文變量, 應用程序在創(chuàng )建RunTime后, 首先應調用至少一次JS_NewCONtext 來(lái)創(chuàng )建一個(gè)上下文。上下文的實(shí)際數量依賴(lài)于程序中同時(shí)使用的腳本數。程序中每個(gè)同時(shí)存在的腳本都需要一個(gè)上下文。另一方面, 如果某個(gè)時(shí)刻只有一個(gè)腳本編譯和運行, 則只需一個(gè)上下文給每個(gè)腳本重復使用即可。

3.3 JavaScript 與瀏覽器結合

3.3.1 直接加入方式

絕大部分含有JavaScript 代碼的網(wǎng)頁(yè)都采用直接加入的方式。

  script type=test/javascript>

  document.write(This is Javascript! );

  /script>

其中,script> /script> 是JavaScript 的標簽。scripttype = test/javascript > 用來(lái)提示瀏覽器該程序采用JavaScript 語(yǔ)言編寫(xiě), 需要調動(dòng)相應的解釋程序進(jìn)行解釋。

除此之外, 還有一個(gè)更高版本的嵌入腳本, 使用HTML 中的CDATA 語(yǔ)法, 就是把CDATA 中的文本全部當作純文本處理, 當遇到CDATA 時(shí)結束。

  script language=javascript type=test/javascript>

  ! CDATA[[>

  ! ]]>

  /script>

3.3.2 引用方式

如果已經(jīng)存在一個(gè)JavaScript 源文件(以js 為擴展名),則可以采用引用的方式提高程序代碼的利用率。其基本格式如下:

  script src=url type=test/javascript>

  /script>

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

同樣地, 這樣的JavaScript 程序語(yǔ)句可以放在HTML文檔頭部或主體的任何部分。如果要實(shí)現直接加入JavaScript 程序代碼, 可以首先創(chuàng )建一個(gè)JavaScript 源代碼文件“javascript.js ” , 其代碼為document.write (This isJavascript! ) 。在網(wǎng)頁(yè)中調用程序的方法, 如:

  script src=j(luò )avascript.js type=test/javascript>

  /script>

也可以同時(shí)在導入文件時(shí)指定JavaScript 的版本,如:

  script src = javascript.js type = test/javascript; version =2.0>

  /script>

本文對 操作系統的嵌入式瀏覽器進(jìn)行了與分析。分析了嵌入式瀏覽器的結構, 并對嵌入式瀏覽器的各部分功能進(jìn)行闡述, 其中包括詞法分析、語(yǔ)法分析與布局、瀏覽器JavaScript 支持、I/O 端等部分。其中,在嵌入式瀏覽器的過(guò)程中, 詞法分析的算法是開(kāi)發(fā)技術(shù)的核心。在后續研究工作中, 可以對詞法分析算法做進(jìn)一步的研究, 提高詞法分析的效率, 完善嵌入式瀏覽器功能實(shí)現的效果。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




關(guān)鍵詞: 研究 瀏覽器 嵌入式 Linux 基于

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>