新聞中心

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

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

作者: 時間:2012-02-03 來源:網絡 收藏

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

本文引用地址:http://m.butianyuan.cn/article/149794.htm

1 嵌入式瀏覽器的結構

根據嵌入式瀏覽器的特點, 分析嵌入式瀏覽器的各個部分功能。下面介紹嵌入式瀏覽器的主要功能:

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

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

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

2 HTML 詞法分析

2.1 組成及功能

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

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

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

2.2 算法

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

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

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

圖2 詞法分析算法流程圖

圖2 詞法分析算法流程圖

2.3 詞法分析的設計

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

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

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

  char chText[]; // 字符表

  char *chPointer; // 字符表指針

  char text[]; // 字符串表

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

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

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

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

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

  bool flag=false; //是否掃描過一次

3 瀏覽器JavaScript 支持

3.1 JavaScript 簡介

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

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

JavaScript 具有幾個特性: 能使網頁增加互動性; 能使有規(guī)律地重復的HTML 源代碼簡化, 減少下載時間;能及時響應用戶的操作, 對提交表單做即時的檢查, 無需浪費額外的驗證時間。

3.2 JavaScript 引擎

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

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

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

3.3 JavaScript 與瀏覽器結合

3.3.1 直接加入方式

絕大部分含有JavaScript 代碼的網頁都采用直接加入的方式。

  script type=test/javascript>

  document.write(This is Javascript! );

  /script>

其中,script> /script> 是JavaScript 的標簽。scripttype = test/javascript > 用來提示瀏覽器該程序采用JavaScript 語言編寫, 需要調動相應的解釋程序進行解釋。

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

  script language=javascript type=test/javascript>

  ! CDATA[[>

  ! ]]>

  /script>

3.3.2 引用方式

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

  script src=url type=test/javascript>

  /script>

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

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

  script src=javascript.js type=test/javascript>

  /script>

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

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

  /script>

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

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

linux相關文章:linux教程




評論


相關推薦

技術專區(qū)

關閉