專利名稱:一種基于uCLinux的嵌入式Konqueor瀏覽器的插件開發方法
技術領域:
本發明屬于嵌入式環境下的瀏覽器設計與開發領域,特別是涉及一種基于 uCLinux操作系統的嵌入式Konqueror瀏覽器的插件開發方法。
背景技術:
隨著嵌入式技術和設備的應用領域越來越廣泛,在嵌入式環境中的Web功 能也越來越收到人們的關注,因此,嵌入式瀏覽器的需求便越來越迫切了。目 前國內外嵌入式瀏覽器有許多種,比如微軟的嵌入式IE、 ACCESS的NF等等, 但是大多數都是基于X86的體系結構。但是目前嵌入式領域中,基于ARM特 別是ARM7的嵌入式應用還是占了相當的一部分,而基于它們的嵌入式瀏覽器 卻非常少,其中功能完備、運行穩定的幾乎沒有。
本發明選擇基于Linux的Konqueror/Embedded開源項目作為研究起點,將 其成功地移植到了基于ARM7體系結構的uCLinux平臺下。但是,由于需要跟 上網絡的發展,如何擴展嵌入式瀏覽器的功能成為一個很有必要研究的問題。 插件技術對于解決這個問題是非常重要的,但是有關嵌入式瀏覽器的插件開發 方法,尤其是基于無MMU支持的uCLimix平臺的嵌入式瀏覽器的插件開發, 國內外都很少有相關方面的研究。本發明的目的就是為了提出一種基于uCLimix 的Konqueror/Embedded瀏覽器的插件開發方法,用于提高對嵌入式瀏覽器的功 能擴展的效率和靈活性
發明內容
本發明的目的在于提高嵌入式瀏覽器的擴展能力,提供一種基于uCLinux 平臺的嵌入式Konqueror瀏覽器的插件開發方法。 為了實現上述發明目的,采用的技術方案如下
一種基于uCLinux的嵌入式Ko叫ueor瀏覽器的插件開發方法,利用嵌入式 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 (K Desktop Environment, K桌面環境, 一種自由圖形 工作環境)下的KParts機制,并且將該技術作為整合整個瀏覽器的核心,因此 很容易地使用該機制來加載和卸載Part。該瀏覽器的基本框架示意圖如圖1所 示。圖中可以看出,瀏覽器為分層結構,最底層為KIO網絡層和JavaScript解 釋器,中間層為KHTMLPart部件和DOM&Render渲染引擎,它們是整個瀏覽 器的核心部件,最上層為用戶接口層,負責瀏覽器和用戶的交互。其中 KHTMLPart部件可以嵌套其它的Part,如圖中的文本編輯Part和視圖Part等
在無MMU (Memory Management Unit,內存管理單元)支持的uCLinux平 臺上實現基于嵌入式Konqueror框架的瀏覽器所面臨的問題有多種,除了修改嵌 入式Konqueror瀏覽器的代碼讓其適應特定的嵌入式環境以外,還必須跟上不斷 發展的網絡技術和網絡標準,所以不可避免地要通過插件技術來擴展瀏覽器的 功能。本發明提出的三層模型的插件開發方法正是為了解決這個問題,它基于上述的KParts技術和軟件重用的思想。該模型的示意圖如附圖2所示。
在模型的上端是KHTMLPart部件,也是整個瀏覽器的核心。本發明利用KParts框架的可擴展性,將其作為插件開發的平臺。
中間層為Part層。本發明將插件用傳統的Part來表達,并且將傳統的Part分為模型中的Part和Lib層。由于網絡協議和網絡標準的不斷發展,傳統的Part插件需要進行不斷的更新,所以把易變的代碼從Part中分離出來,組成一個或者多個Lib,從而構成一個Lib層。于是中間層Part和傳統的舊Part從形式上和功能上便完全不同。傳統的Part擁有自己的可視控件、功能實現和用戶接口。而本發明中的Part除了提供基本的UI (User Interface,用戶接口)功能外,主要還是作為瀏覽器和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中所示,文件體中存在一個定義標簽為stagDefmeSound類型。如果解析器得到這個標簽,將會調用相應的函數生成一個Sound類型的角色對象,并且用由標簽頭所指示的文件體中相應的數據將該對象填充,然后包裝成角色標簽,放入角色字典中。對于控制標簽而言,比如得到一個類型為stagStartSomid的控制標簽,解析器會調用相應的函數生成一個動作標簽并且將該動作所操作的角色記錄下來,放入動作字典中。當解析器處理完文件體中的所有標簽后,標簽解析的過程就算完成了。從對該模塊簡單的介紹中我們可以看到,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的卸載并不影響插件的功能被使用。這樣對于嵌入式瀏覽器這樣一個對內存消耗相對較大的嵌入式應用來說,無疑是十分有益的。
權利要求
1、一種基于uCLinux的嵌入式Konqueor瀏覽器的插件開發方法,利用嵌入式Konqueror瀏覽器的基本設計框架和基于KParts技術的集成方式,把需要擴展的功能封裝成Part插入到瀏覽器中,其特征在于將Part中易變的、可復用的和功能性強的部分從Part中分離出來,形成一個Lib層,進而構成一個插件開發模型。
2、 根據權利要求1所述的基于uCLinux的嵌入式Ko叫ueor瀏覽器的插件開發方法,其特征在于所述插件開發模型分為三層,自上而下依次為KHTMLPart層、Part層和Lib層。
3、 根據權利要求1所述的基于uCLinux的嵌入式Konqueor瀏覽器的插件開發方法,其特征在于插件開發模型所應用的插件為Flash插件。
4、 根據權利要求3所述的基于uCLinux的嵌入式Konqueor瀏覽器的插件開發方法,其特征在于所述Lib層設置有和Part層交互的標簽解析模塊,所述標簽解析模塊所解析的標簽包括定義標簽和控制標簽,標簽解析模塊對定義標簽和控制標簽進行解析,并生成新的解碼標簽放入自己維護的字典中,所述解碼標簽包括角色標簽和動作標簽,對應的字典為角色字典和動作字典。
5、 根據權利要求4所述的基于uCLinux的嵌入式Konqueor瀏覽器的插件開發方法,其特征在于所述Lib層設置有和硬件活底層驅動交互的執行引擎模塊,所述執行引擎模塊遍歷動作標簽,將動作標簽劃分為行為標簽和渲染標簽。
全文摘要
本發明提供一種基于uCLinux的嵌入式Konqueor瀏覽器的插件開發方法,利用嵌入式Konqueror瀏覽器的基本設計框架和基于KParts技術的集成方式,把需要擴展的功能封裝成Part插入到瀏覽器中,將Part中易變的、可復用的和功能性強的部分從Part中分離出來,形成一個Lib層,進而構成一個插件開發模型。本發明提高了對嵌入式瀏覽器的功能擴展的效率和靈活性。
文檔編號G06F9/44GK101539859SQ20081019906
公開日2009年9月23日 申請日期2008年10月10日 優先權日2008年10月10日
發明者劉發貴, 張功勝, 凱 李, 李勝文 申請人:華南理工大學