摘要:隨著3G時代的到來,移動瀏覽器與傳統(tǒng)的桌面瀏覽器在功能方面的區(qū)別越來越小。瀏覽器在移動設(shè)備上扮演著重要的角色,越來越多的應(yīng)用和服務(wù)將通過瀏覽器發(fā)布。然而,與傳統(tǒng)的應(yīng)用相比,基于瀏覽器的網(wǎng)絡(luò)應(yīng)用缺乏本地調(diào)用的功能。該文提出了一種基于XmlGlue編程模型和CAR構(gòu)件技術(shù)的方法,對開源瀏覽器引擎WebKit進行擴展。
關(guān)鍵詞:WebKit;XmlGlue;CAR構(gòu)件技術(shù)
中圖分類號: TP393文獻標(biāo)識碼:A文章編號:1009-3044(2009)35-9912-02
Research of Browser Extension Techniques Based on XmlGlue
CAO Qi-xing, CHEN Rong
(System Software Engineering Centre of Tongji University, Shanghai 200092, China)
Abstract: With the adoption of 3G communication technologies, web browser plays an important role on the mobile devices, and more and more applications and services will be based on browser. However, compared with traditional applications, browser-based web applications have no access to native functions. This article introduces an approach to add such capabilities to mobile browser based on XmlGlue and CAR technologies.
Key words: WebKit; XmlGlue; CAR component technology
隨著3G時代的到來,越來越多的人們開始使用移動設(shè)備訪問互聯(lián)網(wǎng),瀏覽器在移動設(shè)備上也扮演著越來越重要的角色。當(dāng)前市場上新出售的智能手機幾乎都預(yù)裝了網(wǎng)頁瀏覽器,這些移動瀏覽器與傳統(tǒng)的桌面瀏覽器在功能方面的區(qū)別也越來越小。Web2.0以及社交網(wǎng)絡(luò)的興起,更加進一步促使瀏覽器成為交付許多應(yīng)用程序的首選方式, 因為它可以很容易跨操作系統(tǒng)進行部署并可以簡化應(yīng)用程序的維護。另外, 在瀏覽器中使用的現(xiàn)代編程語言支持快速的應(yīng)用程序設(shè)計和開發(fā)。
然而,與傳統(tǒng)的應(yīng)用相比,基于瀏覽器的網(wǎng)絡(luò)應(yīng)用仍有很多的不足之處。首先,基于瀏覽器的網(wǎng)絡(luò)應(yīng)用無法訪問本地功能和服務(wù)。比如,它們不可以隨意訪問某本地文件系統(tǒng)、剪貼板、GPS、攝像頭、系統(tǒng)任務(wù)欄/通知等等。其次,因為瀏覽器內(nèi)部使用了文檔對象模型(DOM)和JavaScript腳本來實現(xiàn)應(yīng)用的大部分邏輯,完全基于瀏覽器的網(wǎng)絡(luò)應(yīng)用可能存在效率上的問題。針對這些問題,本文提出了一種基于XmlGlue編程模型[1]和CAR構(gòu)件技術(shù)的方法,對開源瀏覽器引擎WebKit[2]進行擴展。由于融合了網(wǎng)絡(luò)技術(shù)的簡易性和 XmlGlue編程模型的強大功能,使得可以快速地開發(fā)出易用,高效的豐富互聯(lián)網(wǎng)應(yīng)用程序 (RIA)。
1 XmlGlue編程模型與WebKit概述
XmlGlue是由上??铺┦兰o科技有限公司在其操作系統(tǒng)產(chǎn)品Elastos[3]基礎(chǔ)上,設(shè)計并開發(fā)的一種全新的編程模型。利用XmlGlue,可以迅速便捷地開發(fā)出外觀靚麗、功能靈活實用的Widget(小應(yīng)用),非常適合做嵌入式終端(如手機)的小掛件。在功能和外觀上類似于雅虎的widget相媲美,而在代碼量和占用資源方面卻大大少于雅虎Widget。
1.1 XmlGlue編程模型簡介
Glue,作為名詞是膠水的意思,作為動詞是粘合。XmlGlue形象的指明了它在Elastos構(gòu)件平臺中扮演的角色的主要特征,即粘合劑,而它所粘合的對象就是一個個構(gòu)件,它的粘合可以使功能分立的構(gòu)件組合成一個可以向用戶提供完整功能的應(yīng)用實體。從另一方面說,由于它的存在,消除了構(gòu)件間的耦合,使構(gòu)件只需符合XmlGlue的接口標(biāo)準,就能和其他構(gòu)件協(xié)同工作[4]。
更進一步講,XmlGlue技術(shù)是一種MVC架構(gòu)支持技術(shù)。用XML語言描述視圖(View),由CAR構(gòu)件對應(yīng)模型(Model),進行邏輯處理,而XmlGlue則是作為控制器(Controller)部分,把View、Model兩部分連接起來,從而實現(xiàn)界面與實現(xiàn)邏輯的分離。
XmlGlue編程模型中用XML標(biāo)記語言實現(xiàn)視圖(View)部分,描述整個界面的架構(gòu)。XML程序中所用到的標(biāo)簽由Elastos操作系統(tǒng)中的視圖模塊加以支持,而這些控件都是以CAR構(gòu)件技術(shù)來實現(xiàn)的,用戶也可以通過CAR構(gòu)件技術(shù)編寫自己的標(biāo)簽,運用到XML程序中來,以滿足特殊的要求。
XmlGlue編程模型中用腳本語言和Reflection部分實現(xiàn)控制器(Controller)部分。腳本語言嵌入在XML文件中,可以對所有的構(gòu)件及構(gòu)件內(nèi)的資源進行操作,使得應(yīng)用能夠訪問獨立于界面架構(gòu)的構(gòu)件,彌補XML在描述邏輯上的缺陷,實現(xiàn)用戶與界面的互操作。
XmlGlue編程模型用CAR構(gòu)件技術(shù)實現(xiàn)模型(Model)。Elastos操作系統(tǒng)中的所有CAR構(gòu)件都可以作為基于XmlGlue應(yīng)用開發(fā)中的模型,也可用用戶自己編寫的CAR構(gòu)件作為模型,并且,因為Elastos操作系統(tǒng)提供了構(gòu)件的自動尋址、自動加載機制,所有用到的CAR構(gòu)件模型也可以在網(wǎng)絡(luò)上獲得,前提是已知構(gòu)件在網(wǎng)絡(luò)上的鏈接地址。XmlGlue編程模型的圖示如圖1。
1.2 開源瀏覽器引擎WebKit簡介
WebKit 是以 LGPL (和部分 BSD) 方式授權(quán)的開源網(wǎng)絡(luò)瀏覽器引擎, 此類授權(quán)適合將 WebKit 集成到商業(yè)框架中。它完全符合標(biāo)準,支持與當(dāng)前網(wǎng)絡(luò)內(nèi)容兼容所需的所有功能。它完全支持 HTML 4.01、XHTML 1.1、XML、CSS 2.1、JavaScript 1.5、大部分SVG 1.2、部分 CSS 3、HTML editing、HTML canvas、AJAX、XSLT 和 XPath 1.0。
移動領(lǐng)域的很多重量級公司都已采用 WebKit作為其瀏覽器解決方案的首選基礎(chǔ)。WebKit是Apple的Safari瀏覽器、Google Android和上百萬手機用戶使用的S60瀏覽器的引擎。
2 XmlGlue編程模型和WebKit引擎的融合
XmlGlue編程模型是一種非常靈活,可定制的RIA構(gòu)建技術(shù),它充分結(jié)合了XML界面描述功能,腳本的動態(tài)性和CAR構(gòu)件的計算能力。透過XmlGlue編程模型里面的控制器模塊,并結(jié)合CAR構(gòu)件反射機制,我們可以實現(xiàn)從腳本環(huán)境直接調(diào)用本地服務(wù)的功能。另外,XmlGlue中XML編程支持的標(biāo)簽(控件)包括圖形系統(tǒng)提供的控件標(biāo)簽,這樣就能直接跟系統(tǒng)的原生圖像系統(tǒng)整合在一起。
而WebKit引擎一般通過以下兩種方式提供本地功能調(diào)用:
1) 以瀏覽器插件的形式提供本地功能調(diào)用,比如Adobe的 Flash和微軟的Silverlight技術(shù)就是以插件的形式提供本地功能擴展的。
2) 擴展JavaScript, 讓本地功能直接暴露在腳本環(huán)境當(dāng)中。具體的步驟是,在事件windowObjectCleared()的處理函數(shù)中調(diào)用JavaScriptCore API 創(chuàng)建一個本地對象對應(yīng)的腳本對象,并將其添加至腳本環(huán)境當(dāng)中。這樣,就可以在腳本中直接調(diào)用本地對象的方法與屬性了。
事實上,HTML里面有個
因此,我們可以通過
其中,屬性type定義嵌入的XmlGlue對象所對應(yīng)的 MIME 類型,屬性codebase表示在何處可找到對象所需的代碼,提供一個基準 URL。
具體到WebKit的代碼,如果當(dāng)前html文檔包含有object標(biāo)簽,引擎會通過下面這個函數(shù)FrameLoader::loadPlugin加載相應(yīng)的插件進行處理。
bool FrameLoader::loadPlugin(RenderPart* renderer, const KURL url, const String mimeType, const Vector
函數(shù)FrameLoader::loadPlugin又會遞歸調(diào)用FrameLoaderClient:: createPlugin和EmbeddedWidget::create創(chuàng)建一個具體的Widget對象。最后,WebKit將該Widget對象添加到當(dāng)前頁面中去。
Widget* createPlugin(const IntSize, HTMLPlugInElement*, const KURL, const Vector
EmbeddedWidget* EmbeddedWidget::create(IWebEmbeddedView* view, Element* element, HWND parentWindow, const IntSize size)
從以上分析可知,只要我們在函數(shù)FrameLoaderClient:: createPlugin的具體實現(xiàn)當(dāng)中去判斷MIME參數(shù)是否為XmlGlue,然后做相應(yīng)的處理就行了。具體代碼如下:
Widget* WebFrameLoaderClient::createPlugin(const IntSize pluginSize, HTMLPlugInElement* element, const KURL url, const Vector
{ Widget *widget=0;
if (classid==”application/x-xmlglue-plugin”)
widget = new XmlGlue::LoadWidget(...);
return widget; }
通過這種形式,我們可以將XmlGlue編程模型與WebKit有機的結(jié)合起來,比如可以將原生的圖像系統(tǒng)控件嵌入到網(wǎng)頁內(nèi),包括menu、comboBox、listBox、listView、tabControl,以及Form,Panel等容器都可以無縫的集成到網(wǎng)頁當(dāng)中。另外,各種本地功能和服務(wù)也可以封裝成基于XmlGlue的widget,以便在網(wǎng)絡(luò)應(yīng)用中使用這些功能。
3 結(jié)束語
本文主要闡述了基于XmlGlue編程模型的瀏覽器擴展技術(shù),并結(jié)合開源瀏覽器引擎驗證了該技術(shù)的可行性。該方法融合了網(wǎng)絡(luò)技術(shù)的簡易性和 XmlGlue編程模型的強大功能,使得可以快速地開發(fā)出易用,高效的豐富互聯(lián)網(wǎng)應(yīng)用程序。
參考文獻:
[1] 黎瑩.陳榕,基于XML-Glue的Widget的開發(fā)與研究[J].計算機技術(shù)與發(fā)展,2007(10).
[2] The WebKit open source project[EB/OL].http://webkit.org/.
[3] Elastos資料大全[M].上海:上??铺┦兰o科技有限公司,2009.
[4] 陳榕,劉藝平.技術(shù)報告:基于構(gòu)件、中間件的因特網(wǎng)操作系統(tǒng)及跨操作系統(tǒng)的構(gòu)件、中間件運行平臺(863課題技術(shù)鑒定文件)[R].2003.