摘要:對瀏覽器進行本地擴展,對JavaScript的功能進行擴充,能強化瀏覽器在嵌入式平臺的應用。該文將主要介紹基於WebKit內核瀏覽器的本地JS擴展方法,以實現瀏覽器對本地JavaScript對象的調用,拓寬瀏覽器的功能領域。 論文網-關鍵詞:WebKit;JavaScript;本地擴展;嵌入式;播放器 論文發表:www.qikan110.com1009-3044(2011)30-7528-02 Browser Based on WebKit Native Extension Methods WU Guang-xu, WU Xiao-xi (University of Electronic Science and Technology, Chengdu 611731, China) Abstract: To strengthen the support of browser for multi-platform business and multi-service business, for the browser, local extension has become an effective solution, which expands the functionality of JavaScript. This article will focus on explaining local JS extension methods of core browser based on WebKit. In order to achieve the situation that browser can select JavaScript objects on the local level which broadens the function of itself. Key words: webkit; javascript; native extension; embedded; player 目前極大多數的嵌入式設備上都配有上網功能,且對上網的要求極高,用戶有9 成以上的上網行爲靠瀏覽器來完成的。瀏覽器逐漸成爲嵌入式設備不可或缺的組成部分,是用戶查看網絡信息、獲取網絡資源的一個極爲重要的工具。選取WebKit瀏覽器引擎在瀏覽器開發中帶來不少便利。Apple公司基於WebKit引擎的Safari for Win的推出給用戶帶來了超乎尋常的用戶體驗。隨着Google公司基於WebKit引擎的Chrome瀏覽器的成功開發及推出,WebKit引擎的關注度空前高漲,尤爲是WebKit方便快捷的優勢更讓用戶極爲青睞。目前國內外已經推出了幾款基於WebKit引擎的嵌入式瀏覽器,如iPhone和Android的內置瀏覽器。 1 Webkit本地擴展技術 在嵌入式設備中,瀏覽器做用普遍。經過瀏覽器來完成用戶與應用程序之間的交互,能夠很大程度上下降應用程序的開發和移植難度。爲強化對基於瀏覽器的應用程序的支持,現代的瀏覽器提供了擴展機制來加載本地代碼以實現相應的功能和操做,好比ActiveX和NPAPI插件的方式,Google提出了Native Client技術。對瀏覽器進行本地擴展成爲一種有效的解決方案,對JavaScript的功能進行擴充,同時這樣還很好的保證了安全性。這就是本文將主要介紹基於WebKit內核瀏覽器的本地JS擴展方法,即改造WebKit,將JavaScript對象與本地對象映射,使JS對象本地化,實現瀏覽器對本地JavaScript對象的調用,以拓寬JavaScript的功能領域。 2 WebKit本地js擴展方法及調用流程 2.1 WebKit本地js擴展方法 2.1.1 標題 1) 在WebKit源碼路徑下的WebCore/page/ 下DOMWindow.cpp、DOMWindow.h、DOMWindow.idl添加PlayTool類: DOMWindow.h中添加PlayTools類,以及類的函數指針 playtools(),以及類的對象m_PlayTools; DOMWindow.cpp中添加PlayTools類的函數指針playtools()的實現:在DOMWindow::clear()中添加PlayTools對象的disconnectFrame()函數; DOMWindow.idl中添加PlayTool,格式如readonly attribute PlayTools PlayTools。 2) 在WebCore/page/ 下建立PlayTools.cpp、PlayTools.h、PlayTools.idl: PlayTools.idl中添加PlayTools接口interface PlayTools {},在接口中定義要使用的接口函數,如測試函數 [DoNotCheckDomainSecurity] int debug(in DOMString infor)、本地讀取函數等。PlayTools.h中,定義新添加的接口函數; PlayTools.cpp中,實現新添加的接口函數。 3) 實現PlayTools類中成員函數,成員函數 的實現能夠直接在PlayTools.cpp中實現,但爲了修改實現函數時不從新編譯瀏覽器,因此如今實現函數與瀏覽器分離,採起第三方庫的形式,在PlayTools.cpp用dlopen導入第三方庫,在WebCore/page/添加 WebKit_PlayTools.h,在WebKit_PlayTools.h 中PlayTools接口函數指針定義。 4) 在第三方庫中實現類中成員函數。須要WebCore/page/ 中的WebKit_PlayTools.h文件,新建WebKit_PlayTools.c、PlaylFile.h、PlayFile.c。在WebKit_PlayTools.c初始化接口函數指針,使其指向對應的實現函數。在PlaylFile.h中定義本地操做的實現函數,如:int createPlaylHtmlFile(char* dpath)、 int getPlayPath(char* path)。在PlayFile.c中實現全部本地操做的實現函數,如:調用播放器,播控等。將WebKit_PlayTools.h、 WebKit_PlayTools.c、PlayFile.h、PlayFile.c編成動態庫,動態庫名稱爲PlayTools.cpp中的dlopen導入的庫名。 5)修改編譯文件,將PlayTools.cpp和 PlayTools.h添加到CmakeList.txt,編譯瀏覽器(即調試方便,可先編譯PC版本的瀏覽器)。 6) 測試本地JavaScript擴展接口:編寫簡單的測試網頁,JS中直接調用接口函數:PlayTools.debug("test")來確認本地JavaScript擴展正確與否。 7) 編寫本地Html網頁,進行相應的操做。 2.2 Webkit本地擴展及實施例 2.2.1 本地擴展流程 如圖1。 2.2.2 實例 以調用播放器並播控爲例: 首先對基於Webkit內核的瀏覽器,進行JavaScript本地擴展,添加播放器操做接口,如調用播放器、暫停、播放、恢復、快進、快退、下一個、調節音量、靜音、退出等,添加完接口後正確編譯瀏覽器。而後編寫用於調用播放器以及進行播控的Html頁面,相關操做上使用本地擴展的JS的API。 確保設備上已經有播放器應用程序以後,經過瀏覽器,打開本地播放顯示頁面,傳遞本地視頻文件或者網絡視頻文件路徑,調用播放器的open接口,播放器啓動,播放顯示頁面跳轉到透明頁,該透明頁是上一步所寫的播控頁。在JS中經過鍵值映射來調用播控函數,如暫停、播放、恢復、快進、快退、下一個、調節音量、靜音、退出等。這樣能夠經過瀏覽器對播放器進行操控。如此即可以簡易、快速、有效的對播放器操做管理。 圖2爲實施例的流程圖。 3 應用 本文應用於瀏覽器領域,主要應用在嵌入式設備上。利用瀏覽器技術在嵌入式設備上的使用,對瀏覽器進行JavaScript擴展,經過JavaScript類和本地類之間的映射,在網頁上經過調用本地的JavaScript接口,擴展Javascript的API,以達到擴大操做範圍。基於WebKit瀏覽器的本地擴展用途很廣,好比:瀏覽器調用播放器。能夠添加本地接口,而後只須要在瀏覽器中調用本地播放器的功能接口(如播放、暫停、恢復、快進、快退、音量等),而後網頁跳轉透明頁,使下層的播放器實現出來,經過透明頁進行播控;顯示本地文件;經過瀏覽器進行本地下載、本地IP設置(DHCP、static IP、PPPOE)、恢復出廠設置、用戶認證、業務設置、密碼修改等。 4 結論 本文提出的基於WebKit的嵌入式瀏覽器的本地擴展方法,實現了瀏覽器以本地代碼的調用。充分利用瀏覽器技術在嵌入式設備上的使用,對瀏覽器進行JavaScript擴展,使JavaScript類與本地擴展類實現映射,經過瀏覽器,完成瀏覽器本不具有的許多功能,拓展了瀏覽器在嵌入式領域的用途。經過引入了瀏覽器的本地擴展技術,用戶能直接在瀏覽器上完成大部分操做,瀏覽器成了用戶使用最多的UI界面,減小了用戶操做上的不便。同時也利用WebKit瀏覽器的排版能力加快UI的設計和開發,減小了開發難度和成本,下降了硬件上的額爲開銷;使用戶對終端設備的管理更加智能,操做效率更高,體驗更加流暢。 參考文獻:發表論文: [1] The WebKet open source project[EB/OL].[2011-08-10].http://webkit.org. [2] JavaScript 1.5 Reference[EB/OL].http://devedge.netscape.com/library/manuals/2000/javascript/1.5/refercence/. [3] 賀理,吳健,賈彥民.基於JavaScript的瀏覽器端調用web服務研究與實現[J].中國科學院研究生院學報,2007,24(6). [4] 蔣章概,陳榕.基於CAR構件的WebKit本地擴展策略[J].計算機應用,2009,29. [5] 趙經緯,周餘.基於WebKit的嵌入式瀏覽器的研究與實現[J].電子測量技術,2009,34(3).