專利名稱:一種基于Webkit 內核提供網頁瀏覽的方法及裝置的制作方法
技術領域:
本申請涉及網頁技術,特別是涉及一種基于Webkit內核提供網頁瀏覽的方法及
>J-U裝直。
背景技術:
網頁瀏覽器在全球廣泛使用,是一種用于訪問互聯網獲取資訊的應用軟件。隨著技術的進步和發展,越來越多其他類型的軟件,如即時通訊軟件、下載軟件、甚至輸入法等,都開始借助和使用網頁瀏覽器的頁面訪問能力,實現其軟件的某些功能,提供更好的用戶 體驗。目前的實現方式,大多使用微軟提供的Webbrowser對象,通過在進程內實現一個Webbrowser COM對象來訪問頁面,實現相關功能。這一技術實現方式存在以下弊端,例如Webbrowser是一個安全性較弱的瀏覽器控件,容易引發安全問題。
發明內容
本申請提供了一種基于Webkit內核提供網頁瀏覽的方法及裝置,以解決瀏覽器中使用Webbrowser內核控件而帶來的安全性弱的問題。為了解決上述問題,本申請公開了一種基于Webkit內核提供網頁瀏覽的方法,包括設置一 Webkit內核的頁面對象導出接口 ;在第一獨立進程中啟動Webkit內核;在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;并通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。優選地,所述調用所述頁面對象導出接口創建基于Webkit內核的頁面對象,包括獲得所述頁面對象導出接口提供的工廠方法;調用所述工廠方法創建工廠對象;調用所述工廠對象創建基于Webkit內核的頁面對象。優選地,所述通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面內容加載,包括通過所述頁面對象提供的頁面創建方法,調用所述第一獨立進程中的Weblkit內核創建頁面窗口;在該頁面窗口中進行基于Webkit內核的頁面內容加載。優選地,在第二獨立進程中進行所述頁面內容加載,
所述加載包括根據接收到的http請求獲取頁面內容;對獲取到的頁面內容進行解析;對解析結果執行js操作;根據js操作結果建立dom樹;對dom樹進行渲染和展現。優選地,所述頁面瀏覽操作包括
頁面跳轉,和/或,頁面窗口移動,和/或,頁面停止加載,和/或,頁面刷新,和/或,頁面的前進、后退,和/或,頁面銷毀。優選地,所述通過所述頁面對象調用所述獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作,包括通過所述頁面對象提供的Navigate方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面跳轉操作;和/或,通過所述頁面對象提供的Imposition方法,調用所述獨立進程中的Weblkit內核告知所述頁面窗口跟隨外部窗口的移動而移動;和/或,通過所述頁面對象提供的Stop方法,調用所述獨立進程中的Weblkit內核停止在該頁面窗口中加載頁面內容;和/或,通過所述頁面對象提供的Reload方法,調用所述獨立進程中的Weblkit內核器刷新該頁面窗口中的頁面內容;和/或,通過所述頁面對象提供的GoBack方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面后退操作;和/或,通過所述頁面對象提供的GoForward方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面前進操作;和/或,通過所述頁面對象提供的Destroy方法,調用所述獨立進程中的Weblkit內核銷毀該頁面對象。優選地,所述通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,包括構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄;將填充后的參數對象作為參數值傳遞給所述頁面對象提供的頁面創建方法;通過調用參數賦值后的頁面創建方法,實現與所述獨立進程中的Weblkit內核進行通信。優選地,所述設置一 Webkit內核的頁面對象導出接口,包括通過動態鏈接庫提供Webkit內核的頁面對象導出接口。優選地,調用所述頁面對象導出接口之前,還包括訪問注冊表,查找注冊表中所述動態鏈接庫的存儲路徑;從所述存儲路徑加載所述動態鏈接庫。優選地,還包括Webkit內核升級后更新所述動態鏈接庫的版本,并將新版本的動態鏈接庫保存到不同于舊版本的存儲路徑。優選地,多個第二獨立進程從同一存儲路徑加載同一所述動態鏈接庫。
本申請還提供了一種基于Webkit內核提供網頁瀏覽的裝置,包括接口導出模塊,用于設置一 Webkit內核的頁面對象導出接口 ;內核啟動模塊,用于在 第一獨立進程中啟動Webkit內核;第一調用模塊,用于在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;并第二調用模塊,用于通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。優選地,所述第一調用模塊包括工廠方法獲取子模塊,用于獲得所述頁面對象導出接口提供的工廠方法;工廠對象創建子模塊,用于調用所述工廠方法創建工廠對象;頁面對象創建子模塊,用于調用所述工廠對象創建基于Webkit內核的頁面對象。優選地,所述第二調用模塊通過所述頁面對象提供的頁面創建方法,調用所述第一獨立進程中的Weblkit內核創建頁面窗口,并在該頁面窗口中進行基于Webkit內核的頁面內容加載。優選地,在第二獨立進程中進行所述頁面內容加載,所述加載包括根據接收到的http請求獲取頁面內容;對獲取到的頁面內容進行解析;對解析結果執行js操作;根據js操作結果建立dom樹;對dom樹進行渲染和展現。優選地,所述頁面瀏覽操作包括頁面跳轉,和/或,頁面窗口移動,和/或,頁面停止加載,和/或,頁面刷新,和/或,頁面的前進、后退,和/或,頁面銷毀。優選地,所述第二調用模塊包括導航調用子模塊,用于通過所述頁面對象提供的Navigate方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面跳轉操作;和/或,移動調用子模塊,用于通過所述頁面對象提供的R印osition方法,調用所述獨立進程中的Weblkit內核告知所述頁面窗口跟隨外部窗口的移動而移動;和/或,停止調用子模塊,用于通過所述頁面對象提供的Stop方法,調用所述獨立進程中的Weblkit內核停止在該頁面窗口中加載頁面內容; 和/或,刷新調用子模塊,用于通過所述頁面對象提供的Reload方法,調用所述獨立進程中的Weblkit內核器刷新該頁面窗口中的頁面內容;和/或,頁面后退調用子模塊,用于通過所述頁面對象提供的GoBack方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面后退操作;和/或,頁面前進調用子模塊,用于通過所述頁面對象提供的GoForward方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面前進操作;和/或,銷毀調用子模塊,用于通過所述頁面對象提供的Destroy方法,調用所述獨立進程中的Weblkit內核銷毀該頁面對象。
優選地,所述第二調用模塊包括構造子模塊,用于構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄;參數賦值子模塊,用于將填充后的參數對象作為參數值傳遞給所述頁面對象提供的頁面創建方法;頁面創建子模塊,用于通過調用參數賦值后的頁面創建方法,實現與所述獨立進程中的Weblkit內核進行通信。優選地,所述接口導出模塊通過動態鏈接庫提供Webk it內核的頁面對象導出接□。優選地,還包括路徑查找模塊,用于訪問注冊表,查找注冊表中所述動態鏈接庫的存儲路徑;加載模塊,用于從所述存儲路徑加載所述動態鏈接庫。優選地,還包括更新模塊,用于Webkit內核升級后更新所述動態鏈接庫的版本,并將新版本的動態鏈接庫保存到不同于舊版本的存儲路徑。優選地,多個第二獨立進程通過從同一存儲路徑加載同一所述動態鏈接庫。與現有技術相比,本申請包括以下優點本申請提出了一種跨進程使用webkit核心實現網頁瀏覽的方法,能很好地解決瀏覽器中的Webtoowser內核版本落后、安全性薄弱、不支持非微軟平臺的問題,和直接使用webkit核心導致的技術門檻高、升級困難、安裝包過大等問題。首先,本申請為WebKit內核導出WebAppTabWrapper對象的接口,第三方軟件獲得WebAppTabWrapper對象后,通過調用該對象的Create方法,通知webkit瀏覽器創建一個新的頁面。網頁瀏覽中進行的http請求,解析返回數據,執行js,建立dom樹,完成最后渲染等具體工作都對第三方軟件不可見,簡化了第三方軟件的技術使用難度。第三方軟件和真正的頁面訪問、解析、渲染模塊工作在不同進程,進程間隔離很好的保護了第三方軟件不受頁面不安全因素的影響。因此,本申請能很好地解決瀏覽器中使用Webtoowser內核而帶來的安全性薄弱、容易導致用戶安全的問題。其次,Webkit核心的升級和bug修復等,由dll服務的升級檢查功能完成。在進行新版本升級安裝時不影響舊版本的運行使用,對第三方軟件完全不可見。第三方軟件通過訪問注冊表的某個項目獲取新的服務版本dll路徑,加載后使用。并且,新舊版本可以同時使用。因此,本申請能很好地解決瀏覽器中的Webbrowser內核版本落后的問題。而且,本申請可以簡化第三方軟件在windows平臺和非windows平臺使用網頁瀏覽增加軟件功能的開發難度,使任意第三方軟件可以使用本發明提供的網頁訪問服務,輕易的訪問頁面,增強軟件用戶體驗。當然,實施本申請的任一產品不一定需要同時達到以上所述的所有優點。
圖I是本申請實施例所述一種基于webkit核心的跨進程網頁瀏覽方法的流程圖2是本申請另一實施例所述基于webkit核心的跨進程網頁瀏覽方法的流程圖;圖3是本申請實施例所述一種基于webkit核心的跨進程網頁瀏覽裝置的結構圖;圖4是本申請另一實施例所述一種基于webkit核心的跨進程網頁瀏覽裝置的結構圖;圖5是本申請另一實施例所述基于webkit核心的跨進程網頁瀏覽方法的流程圖;圖6是本申請另一實施例所述一種基于webkit核心的跨進程網頁瀏覽裝置的結構圖。
具體實施例方式為使本申請的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本申請作進一步詳細的說明。目前,越來越多其他類型的第三方軟件,如即時通訊軟件、下載軟件、甚至輸入法等,都開始借助和使用網頁瀏覽器的頁面訪問能力,實現其軟件的某些功能,提供更好的用戶體驗。微軟的IE瀏覽器提供的Webbrowser對象存在較多的弊端,例如Webbrowser對象的版本過老限制了很多新的頁面技術的使用和展現;Webbrowser是一個安全性較弱的瀏覽器核心,容易引發安全問題;Webtoowser容易被各種流氓軟件安裝插件,注入代碼,引發很多使用問題,比如關閉了 fash和java運行,導致相關功能失效。在第三方軟件實現網頁瀏覽的過程中,為了解決IE的Webbrowser內核存在的上述各種問題,本申請提供了一種使用webkit實現網頁瀏覽的方法。其中,所述webkit是Chrome瀏覽器的核心,webkit是一個開放源代碼的瀏覽器引擎(web browser engine)。但是,如果在第三方軟件中直接使用webkit核心實現網頁瀏覽,存在以下缺陷webkit核心接口復雜,技術門檻高,增加了軟件利用其實現頁面瀏覽功能的技術門檻;webkit核心代碼較多,dll (動態鏈接庫)較大,增加了使用其軟件的體積;瀏覽器版本更新迅速,直接包含webkit核心無法做到快速使用最新技術,規避已知安全問題。基于此,本申請沒有直接使用webkit核心,提供了一種跨進程的頁面瀏覽服務dll,任何第三方軟件可以在安裝了此種dll服務的系統上獲得頁面瀏覽能力,從而簡化了使用webkit渲染頁面的技術門檻和復雜度。Webkit作為一個完整的瀏覽器內核,只負責完成html解析和渲染工作,其它工作如網絡連接請求、js解析、外圍包裝等,都需要第三方軟件實現后,webkit才能正常工作。而實現一個良好的http協議棧和js解析器難度巨大,工作復雜。本申請中的這種頁面瀏覽的dll服務可以理解為一個代理,代理封裝了網絡連接請求、js解析、外圍包裝等工作,從而將這些用戶不關心又復雜的部分對用戶進行了屏蔽;并且,代理還封裝了簡單的接口來調用幾個基本的webkit瀏覽器操作。第三方軟件可以通過這種dll服務實現與webkit核心的通信,用戶只需給出url和一個用于承載頁面的窗口句柄,就可以得到一個渲染完成的網頁。由于網頁瀏覽過程中的很多工作都由dll服務完成,因此簡化了第三方軟件的開發。下面通過實施例對本申請所述方法的實現流程進行詳細說明。參照圖1,是本申請實施例所述一種基于webkit核心的跨進程網頁瀏覽方法的流程圖。步驟101,通過自定義接口加載動態鏈接庫;所述自定義接口包括外部接口和內部接口,通過外部接口可以加載動態鏈接庫。動態鏈接庫(dll服務)提供給第三方軟件使用的是外部接口,第三方軟件實現這些簡單的外部接口后,就可以與動態鏈接庫通信。動態鏈接庫還提供了 Webkit內核的頁面對象導出接口,這些內部接口為webkit 內核導出的類似IE的Webbrowser對象的接口,但具體的接口數目和使用復雜度要大大低于IE的Webbrowser。而且,傳統方法包裝webkit需要實現數百個接口,但本申請實施例中第三方軟件所需實現的接口數目非常少,但幾個基本的瀏覽器操作都已經包括在其中。第三方軟件實現所述數目較少的自定義接口后,通過自定義接口加載動態鏈接庫dlI,具體的加載方法如下通過自定義接口訪問注冊表;查找注冊表中所述動態鏈接庫dll的存儲路徑;從所述存儲路徑加載所述動態鏈接庫dll。步驟102,調用所述動態鏈接庫來創建頁面對象;通過調用動態鏈接庫提供的內部接口,就可以實現與Webkit內核的通信。其中,使用工廠模式來創建頁面對象。工廠模式就是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。它定義一個用于創建對象的接口,由子類決定實例化哪一個類。具體子步驟如下子步驟I,調用所述動態鏈接庫來獲得工廠方法;子步驟2,調用所述工廠方法創建工廠對象;子步驟3,調用所述工廠對象創建頁面對象。步驟103,通過調用所述頁面對象中的頁面創建方法,通知webkit瀏覽器創建頁面窗口,并完成該頁面窗口中頁面內容的渲染和展現。具體子步驟如下子步驟1,構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄;子步驟2,將填充后的參數對象作為參數值傳遞給所述頁面對象中的頁面創建方法;子步驟3,通過調用參數賦值后的頁面創建方法,通知webkit瀏覽器創建頁面窗口,并完成該頁面窗口中頁面內容的渲染和展現。頁面對象中提供了頁面創建方法,該方法中設有參數,參數賦值為目標訪問的網址和窗口句柄后,通過調用該方法即可與webkit內核通信,參數值傳給webkit內核,webkit內核按照參數值訪問目標網址,并創建頁面窗口,完成該頁面窗口中頁面內容的渲染和展現。
最后,瀏覽器的相關回調還可通過對應的函數調用通知第三方軟件。下面通過一個具體的例子詳細解釋上述內容。接口的內容和用法如下提供一個工廠方法,供第三方軟件調用extern" C" {DLL_INTERFACE WebAppFactory^GetffebAppFactory();};第三方軟件可通過LoadLibrary函數加載dl I服務(動態鏈接庫),并通過GetProcAddress函數獲得工廠方法GetWebAppFactory,并創建工廠對象WebAppFactory,進而得到一個頁面對象WebAppTabWrapper,其接口如下
class WebAppTaWrapper {public:
virtual HKESULT STDMETHODCALLTYPE Create(WebApj)CreateParams const &) = 0; virtual HKESULT STDMETHODCALLTYPE DestroyO = 0; virtual HRESULT STDMETHODCALLTYPE Navigate(char const *) = 0;virtual HRESULT STDMETHODCALLTYPE Reposition (
WebAppRepositionParams const &) = 0; virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0; virtual HRESULT STDMETHODCALLTYPE Reload( void) = 0; virtual HRESULT STDMETHODCALLTYPE GoBack( void) = 0; virtual HKESULT STDMETHODCALLTYPE GoForward( void) = 0; virtual "WebAppTabfrapper () {}
};第三方軟件獲得WebAppTabWrapper對象后,通過調用該對象提供的Create方法,通知webkit內核的網頁瀏覽服務創建一個新的頁面,并調用Navigate方法通知服務進行導航操作,Stop、Reload、GoBack、GoForward則提供基本的頁面前進后退、停止加載和刷新功能。第三方軟件在不再需要瀏覽頁面時,通過調用Destroy方法銷毀頁面對象。具體的,還可以包括以下步驟通過調用所述頁面對象中的Navigate方法,通知webkit瀏覽器在該頁面窗口中進行頁面跳轉操作。例如,新創建的頁面窗口中,最初訪問目標網址顯示的歡迎頁面的內容,然后通過調用Navigate方法,可以從歡迎頁跳轉到真正的主頁,但是不再創建新的頁面窗口,只在同一個頁面窗口中進行頁面內容的跳轉。
通過調用所述頁面對象中的Stop方法,通知webkit瀏覽器停止該頁面窗口中頁面內容的渲染和展現。通過調用所述頁面對象中的Reload方法,通知webkit瀏覽器刷新該頁面窗口中的頁面內容。通過調用所述頁面對象中的GoBack方法,通知webkit瀏覽器在該頁面窗口中進行頁面后退操作;通過調用所述頁面對象中的GoForward方法,通知webkit瀏覽器在該頁面窗口中進行頁面前進操作。通過調用所述頁面對象中的Destroy方法,通知webkit瀏覽器銷毀該頁面對象。 當第三方軟件實現如上接口后,webkit瀏覽器的相關回調將通過對應的函數調用通知第三方軟件。具體的工作流程如圖2所示參照圖2,是本申請另一實施例所述基于webkit核心的跨進程網頁瀏覽方法的流程圖。步驟201,第三方軟件實現WebAppUIDelegate接口 ;所述WebAppUIDelegate接口是dl I服務提供給第三方軟件使用的外部接口,作為一個較佳實施例,該接口具體地提供了以下接口函數
class WebAppUIDelegate { public:
virtual void OnHandleAccelerator() = 0; virtual void OnOpenURL() = 0; virtual void OnTitleChangeO = 0; virtual void OnStatusTextChange() = 0; virtual void OnNavigateComplete2() = 0; virtual void OnNavigateError() = 0; virtual void OnQuit() = 0; virtual void OnUpdateTargetUrl() = 0; virtual void OnGetCurrentUrlRsp() = 0; virtual void OnCrashReport() = 0; virtual, void OnReportMainWindowO = 0; virtual, void OnWebAppJsCa11 () = 0;
};
各接口函數的說明如下OnHandleAccelerator函數提供快捷鍵回調方法,通知第三方軟件用戶按下了一組快捷鍵;OnOpenURL函數提供打開頁面回調方法,通知第三方軟件用戶嘗試開啟一個新頁面,第三方軟件可以允許或禁止;OnTitleChange函數提供title (標題)改變回調方法,通知第三方軟件當前的窗口 title文字發生了改變;OnStatusTextChange函數提供狀態欄改變回調方法,通知第三方軟件當前的窗口狀態欄文字發生了改變;0nNavigateComplete2函數提供導航完畢回調方法,通知第三方軟件導航完成;
OnNavigateError函數提供導航錯誤回調方法,通知第三方軟件導航錯誤;OnQuit函數提供退出回調方法,通知第三方軟件用戶關閉了當前頁面或者渲染服務因某種原因退出了;OnUpdateTargetUrl函數提供目標url更新回調方法,通知第三方軟件當前的目標url發生了改變;OnGetCurrentUrlRsp函數提供獲取當前url回調方法,通知第三方軟件當前的url ;OnCrashReport函數提供崩潰回調方法,通知第三方軟件頁面訪問服務發生了崩潰;OnReportMainffindow函數提供主窗口回調方法,通知第三方軟件當前頁面的主窗
n ;OnWebAppJsCalI函數提供js回調方法,通知第三方軟件,頁面請求執行一個外部js調用。步驟202,通過約定的注冊表項目,找到Webapp_proxy. dll所在的路徑;其中,所述Webapp_proxy. dll是動態鏈接庫,即dll服務;步驟203,加載 Webapp_proxy. dll ;如果加載成功,即繼續步驟204 ;如果加載失敗,則轉到異常處理;步驟204,使用 GetProcAddress 函數得到 GetWebAppFactory 方法;其中,所述GetWebAppFactory方法為工廠方法;步驟205,調用GetWebAppFactory方法創建一個工廠對象;創建的工廠對象為WebAppFactory ;步驟206,調用工廠對象的CreateWebAppTab方法創建一個標簽頁對象;其中,所述標簽頁對象為WebAppTaWrapper ;步驟207,構造一個WebAppCreateParams對象,并填充好目標的url和用于容納頁面的窗口句柄,然后用這個對象作為參數調用標簽頁對象的Create方法,通知webkit內核創建頁面;其中,所述WebAppCreateParams對象為參數對象;webkit內核根據目標的url和窗口句柄創建一個新的頁面窗口,并完成頁面的渲染和展現;
步驟208,如果機器的網絡環境正常且url正確,一個新的頁面窗口將成為WebAppCreateParams的子窗口,并完成頁面的渲染和展現工作,用戶可以正常地和這個頁面交互。基于圖2的流程,多個第三方軟件可以同時加載此接口 dll,完成頁面瀏覽,彼此互不影響,互不可見。Webkit核心的升級和bug修復等,由dll服務的升級檢查功能完成。在進行新版本升級安裝時不影響舊版本的運行使用,對第三方軟件完全不可見。第三方軟件通過訪問注冊表的某個項目獲取新的服務版本dll路徑,加載后使用。并且,新舊版本可以同時使用。綜上所述,本申請實施例為WebKit內核導出WebAppTabWrapper對象的接口,第三方軟件獲得WebAppTabWrapper對象后,通過調用該對象的Create方法,通知webkit瀏覽器創建一個新的頁面。網頁瀏覽中進行的http請求,解析返回數據,執行js,建立dom樹,完成最后渲染等具體工作都對第三方軟件不可見,簡化了第三方軟件的技術使用難度。第三方軟件和真正的頁面訪問、解析、渲染模塊工作在不同進程,即實現了跨進程的訪問,進程間隔離很好的保護了第三方軟件不受頁面不安全因素的影響。其中,所述“進程間隔離”包含兩層含義;其一,dll服務與webkit內核相互隔離,分別工作在不同進程;其二,第三方軟件之間相互隔離,每個第三方軟件都可以獨立加載dll服務來完成頁面瀏覽,相互之間互不干擾。而且,基于webkit核心的網頁訪問服務不受限于微軟windows操作系統的版本及操作系統本身,在非windows平臺,也能以與上文類似的方式工作,簡化了第三方軟件進行跨平臺版本開發的難度。總之,本申請提出了一種跨進程使用webkit核心實現網頁瀏覽的方法,能很好地解決IE的Webbrowser內核版本落后、安全性薄弱、不支持非微軟平臺的問題,和直接使用w e b k i t核心導致的技術門濫高、升級困難、安裝包過大等問題。并且,可以簡化第三方軟件在windows平臺和非windows平臺使用網頁瀏覽增加軟件功能的開發難度,使任意第三方軟件可以使用本發明提供的網頁訪問服務,輕易的訪問頁面,增強軟件用戶體驗。需要說明的是,對于前述的方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本申請并不受所描述的動作順序的限制,因為依據本申請,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作并不一定是本申請所必需的。基于上述方法實施例的說明,本申請還提供了相應的網頁瀏覽裝置實施例。參照圖3,是本申請實施例所述一種基于webkit核心的跨進程網頁瀏覽裝置的結構圖。 所述網頁瀏覽裝置可以包括以下接口和模塊自定義接口10和加載模塊20,所述加載模塊20通過自定義接口 10加載動態鏈接庫;第一調用模塊30,用于調用所述動態鏈接庫來創建頁面對象;第二調用模塊40,用于通過調用所述頁面對象中的頁面創建方法,通知webkit瀏覽器創建頁面窗口,并完成該頁面窗口中頁面內容的渲染和展現。其中,所述第一調用模塊30具體可以包括以下子模塊工廠方法獲取子模塊,用于調用所述動態鏈接庫來獲得工廠方法;工廠對象創建子模塊,用于調用所述工廠方法創建工廠對象;頁面對象創建子模塊,用于調用所述工廠對象創建頁面對象。其中,所述第二調用模塊40具體可以包括以下子模塊構造子模塊,用于構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄;參數賦值子模塊,用于將填充后的參數對象作為參數值傳遞給所述頁面對象中的頁面創建方法;
·
頁面創建子模塊,用于通過調用參數賦值后的頁面創建方法,通知webkit瀏覽器創建頁面窗口,并完成該頁面窗口中頁面內容的渲染和展現。其中,所述加載模塊20具體可以包括以下子模塊注冊表訪問子模塊,用于通過自定義接口訪問注冊表;路徑查找子模塊,用于查找注冊表中所述動態鏈接庫的存儲路徑;加載子模塊,用于從所述存儲路徑加載所述動態鏈接庫。在另一實施例中,如圖4所示優選地,所述裝置還可以包括導航調用模塊50,用于通過調用所述頁面對象中的Navigate方法,通知webkit瀏覽器在該頁面窗口中進行頁面跳轉操作。優選地,所述裝置還可以包括停止調用模塊60,用于通過調用所述頁面對象中的Stop方法,通知webkit瀏覽器停止該頁面窗口中頁面內容的渲染和展現。優選地,所述裝置還可以包括刷新調用模塊70,用于通過調用所述頁面對象中的Reload方法,通知webkit瀏覽器刷新該頁面窗口中的頁面內容。優選地,所述裝置還可以包括頁面后退調用模塊80,用于通過調用所述頁面對象中的GoBack方法,通知webkit瀏覽器在該頁面窗口中進行頁面后退操作;頁面前進調用模塊90,用于通過調用所述頁面對象中的GoForward方法,通知webkit瀏覽器在該頁面窗口中進行頁面前進操作。優選地,所述裝置還可以包括銷毀調用模塊100,用于通過調用所述頁面對象中的Destroy方法,通知webkit瀏覽器銷毀該頁面對象。對于上述圖3和圖4所示的網頁瀏覽裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見圖I和圖2所示方法實施例的部分說明即可。基于以上內容,本申請還提供了另外一種基于Webkit內核提供網頁瀏覽的方法和裝置的實施例,下面分別通過圖5和圖6進行說明。參照圖5所示,是本申請另一實施例所述基于webkit核心的跨進程網頁瀏覽方法的流程圖。步驟501,設置一 Webkit內核的頁面對象導出接口 ;步驟502,在第一獨立進程中啟動Webkit內核;步驟503,在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;所述第一獨立進程和第二獨立進程是兩個進程,換而言之,頁面的瀏覽和Webkit內核的運行相互獨立,互不影響。具體的,調用所述頁面對象導出接口創建基于Webkit內核的頁面對象,可包括以下子步驟子步驟1,獲得所述頁面對象導出接口提供的工廠方法;子步驟2,調用所述工廠方法創建工廠對象;子步驟3,調用所述工廠對象創建基于Webkit內核的頁面對象。步驟504,通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。所述第二獨立進程可通過調用所述頁面對象實現與第一獨立進程中Webkit內核的通信,具體的,所述通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,可包括以下子步驟子步驟1,構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄;子步驟2,將填充后的參數對象作為參數值傳遞給所述頁面對象提供的頁面創建方法;子步驟3,通過調用參數賦值后的頁面創建方法,實現與所述獨立進程中的Weblkit內核進行通信。第二獨立進程調用Weblkit內核可實現頁面瀏覽操作和頁面內容加載,下面分別詳細說明具體的頁面內容加載過程,以及都有哪些頁面瀏覽操作。I、頁面內容加載具體的,通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面內容加載,具體可包括以下處理通過所述頁面對象提供的頁面創建方法,調用所述第一獨立進程中的Weblkit內核創建頁面窗口;在該頁面窗口中進行基于Webkit內核的頁面內容加載。進一步的,在第二獨立進程中進行所述頁面內容加載;并且,所述加載包括以下處理步驟I)根據接收到的http請求獲取頁面內容;2)對獲取到的頁面內容進行解析;3)對解析結果執行js操作;4)根據js操作結果建立dom樹;5)對dom樹進行渲染和展現。
、
2、頁面瀏覽操作所述頁面瀏覽操作可包括
頁面跳轉,和/或,頁面窗口移動,和/或,頁面停止加載,和/或,頁面刷新,和/或,頁面的前進、后退,和/或,頁面銷毀。進一步地對于頁面跳轉操作,可通過所述頁面對象提供的Navigate方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面跳轉操作;對于頁面窗口移動操作,可通過所述頁面對象提供的Reposition方法,調用所述獨立進程中的Weblkit內核告知所述頁面窗口跟隨外部窗口的移動而移動;對于頁面停止加載操作,可通過所述頁面對象提供的Stop方法,調用所述獨立進程中的Weblkit內核停止在該頁面窗口中加載頁面內容;
對于頁面刷新操作,可通過所述頁面對象提供的Reload方法,調用所述獨立進程中的Weblkit內核器刷新該頁面窗口中的頁面內容;對于頁面的前進操作,可通過所述頁面對象提供的GoBack方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面后退操作;對于頁面的后退操作,可通過所述頁面對象提供的GoForward方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面前進操作;對于頁面銷毀操作,可通過所述頁面對象提供的Destroy方法,調用所述獨立進程中的Weblkit內核銷毀該頁面對象。基于圖5實施例的內容,優選地,可通過動態鏈接庫(dll服務)提供Webkit內核的頁面對象導出接口,該導出接口是動態鏈接庫提供的用于與Webkit內核通信的內部接口。此外,所述動態鏈接庫還提供了用于與第三方軟件通信的外部接口。進一步地,在第二獨立進程調用所述頁面對象導出接口創建頁面對象之前,還可以包括以下處理訪問注冊表,查找注冊表中所述動態鏈接庫的存儲路徑;從所述存儲路徑加載所述動態鏈接庫。優選地,還可包括以下處理Webkit內核升級后更新所述動態鏈接庫的版本,并將新版本的動態鏈接庫保存到不同于舊版本的存儲路徑。而且,多個第二獨立進程可從同一存儲路徑加載同一所述動態鏈接庫。即在進行新版本升級安裝時不影響舊版本的運行使用,新舊版本可以同時使用,對第三方軟件完全不可見。并且,多個第三方軟件可同時實現基于Webkit內核的網頁瀏覽。參照圖6所示,是本申請另一實施例所述一種基于webkit核心的跨進程網頁瀏覽裝置的結構圖。所述基于Webkit內核提供網頁瀏覽的裝置,具體可包括以下模塊接口導出模塊61,用于設置一 Webkit內核的頁面對象導出接口 ;內核啟動模塊62,用于在第一獨立進程中啟動Webkit內核;第一調用模塊63,用于在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;并第二調用模塊64,用于通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。優選地,所述第一調用模塊63具體可包括工廠方法獲取子模塊,用于獲得所述頁面對象導出接口提供的工廠方法;工廠對象創建子模塊,用于調用所述工廠方法創建工廠對象;頁面對象創建子模塊,用于調用所述工廠對象創建基于Webkit內核的頁面對象。優選地,所述第二調用模塊64可通過所述頁面對象提供的頁面創建方法,調用所述第一獨立進程中的Weblkit內核創建頁面窗口,并在該頁面窗口中進行基于Webkit內核的頁面內容加載。優選地,在第二獨立進程中進行所述頁面內容加載,所述加載包括根據接收到的http請求獲取頁面內容;對獲取到的頁面內容進行解析;對解析結果執行js操作;根據js操作結果建立dom樹;對dom樹進行渲染和展現。優選地,所述頁面瀏覽操作包括頁面跳轉,和/或,頁面窗口移動,和/或,頁面停止加載,和/或,頁面刷新,和/或,頁面的前進、后退,和/或,頁面銷毀。優選地,所述第二調用模塊64具體可包括導航調用子模塊,用于通過所述頁面對象提供的Navigate方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面跳轉操作; 和/或,移動調用子模塊,用于通過所述頁面對象提供的R印osition方法,調用所述獨立進程中的Weblkit內核告知所述頁面窗口跟隨外部窗口的移動而移動;和/或,停止調用子模塊,用于通過所述頁面對象提供的Stop方法,調用所述獨立進程中的Weblkit內核停止在該頁面窗口中加載頁面內容;和/或,刷新調用子模塊,用于通過所述頁面對象提供的Reload方法,調用所述獨立進程中的Weblkit內核器刷新該頁面窗口中的頁面內容;和/或,頁面后退調用子模塊,用于通過所述頁面對象提供的GoBack方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面后退操作;和/或,頁面前進調用子模塊,用于通過所述頁面對象提供的GoForward方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面前進操作;和/或,銷毀調用子模塊,用于通過所述頁面對象提供的Destroy方法,調用所述獨立進程中的Weblkit內核銷毀該頁面對象。優選地,所述第二調用模塊64還可包括 構造子模塊,用于構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄;參數賦值子模塊,用于將填充后的參數對象作為參數值傳遞給所述頁面對象提供的頁面創建方法;頁面創建子模塊,用于通過調用參數賦值后的頁面創建方法,實現與所述獨立進程中的Weblkit內核進行通信。優選地,所述接口導出模塊61可通過動態鏈接庫提供Webkit內核的頁面對象導出接口。優選地,所述裝置還可包括路徑查找模塊65,用于訪問注冊表,查找注冊表中所述動態鏈接庫的存儲路徑;加載模塊66,用于從所述存儲路徑加載所述動態鏈接庫。優選地,所述裝置還可包括更新模塊67,用于Webkit內核升級后更新所述動態鏈接庫的版本,并將新版本的動態鏈接庫保存到不同于舊版本的存儲路徑。
優選地,多個第二獨立進程通過從同一存儲路徑加載同一所述動態鏈接庫。對于上述圖6所示的網頁瀏覽裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見圖5所示方法實施例的部分說明即可。本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。本申請實施例可以實施在任何支持圖形處理、互聯網內容擷取和渲染的裝置(或多個裝置)上。這些裝置包括但不限于個人計算機、集群服務器、移動電話、工作站、嵌入式系統、游戲機、電視、機頂盒,或任何其它支持計算機圖形和內容顯示的計算裝置。這些裝置可以包括但不限于擁有執行和儲存指令的一個或多個處理器和存儲器的裝置。這些裝置可以包括軟件、固件和硬件。軟件可以包括一個或多個應用程序和操作系統。硬件可以包括但不限于處理器、存儲器及顯示器。本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。本申請是參照根據本申請實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。 以上對本申請所提供的一種基于Webkit內核提供網頁瀏覽的方法及裝置,進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例
的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據本申請的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。
權利要求
1.一種基于Webkit內核提供網頁瀏覽的方法,其特征在于,包括 設置一 Webkit內核的頁面對象導出接口 ; 在第一獨立進程中啟動Webkit內核; 在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;并通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。
2.根據權利要求I所述的方法,其特征在于,所述調用所述頁面對象導出接口創建基于Webkit內核的頁面對象,包括 獲得所述頁面對象導出接口提供的工廠方法; 調用所述工廠方法創建工廠對象; 調用所述工廠對象創建基于Webkit內核的頁面對象。
3.根據權利要求I所述的方法,其特征在于,所述通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面內容加載,包括 通過所述頁面對象提供的頁面創建方法,調用所述第一獨立進程中的Weblkit內核創建頁面窗口; 在該頁面窗口中進行基于Webkit內核的頁面內容加載。
4.根據權利要求3述的方法,其特征在于,在第二獨立進程中進行所述頁面內容加載, 所述加載包括 根據接收到的http請求獲取頁面內容; 對獲取到的頁面內容進行解析; 對解析結果執行js操作; 根據js操作結果建立dom樹; 對dom樹進行渲染和展現。
5.根據權利要求3所述的方法,其特征在于,所述頁面瀏覽操作包括 頁面跳轉,和/或,頁面窗口移動,和/或,頁面停止加載,和/或,頁面刷新,和/或,頁面的前進、后退,和/或,頁面銷毀。
6.根據權利要求5所述的方法,其特征在于,所述通過所述頁面對象調用所述獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作,包括 通過所述頁面對象提供的Navigate方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面跳轉操作; 和/或,通過所述頁面對象提供的Imposition方法,調用所述獨立進程中的Weblkit內核告知所述頁面窗口跟隨外部窗口的移動而移動; 和/或,通過所述頁面對象提供的Stop方法,調用所述獨立進程中的Weblkit內核停止在該頁面窗口中加載頁面內容; 和/或,通過所述頁面對象提供的Reload方法,調用所述獨立進程中的Weblkit內核器刷新該頁面窗口中的頁面內容; 和/或,通過所述頁面對象提供的GoBack方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面后退操作; 和/或,通過所述頁面對象提供的GoForward方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面前進操作; 和/或,通過所述頁面對象提供的Destroy方法,調用所述獨立進程中的Weblkit內核銷毀該頁面對象。
7.根據權利要求I至6任一所述的方法,其特征在于,所述通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,包括 構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄; 將填充后的參數對象作為參數值傳遞給所述頁面對象提供的頁面創建方法; 通過調用參數賦值后的頁面創建方法,實現與所述獨立進程中的Weblkit內核進行通信。
8.根據權利要求I所述的方法,其特征在于,所述設置一Webkit內核的頁面對象導出接口,包括 通過動態鏈接庫提供Webkit內核的頁面對象導出接口。
9.根據權利要求8所述的方法,其特征在于,調用所述頁面對象導出接口之前,還包括 訪問注冊表,查找注冊表中所述動態鏈接庫的存儲路徑; 從所述存儲路徑加載所述動態鏈接庫I。
10.根據權利要求9所述的方法,其特征在于,還包括 Webkit內核升級后更新所述動態鏈接庫的版本,并將新版本的動態鏈接庫保存到不同于舊版本的存儲路徑。
11.根據權利要求10所述的方法,其特征在于 多個第二獨立進程從同一存儲路徑加載同一所述動態鏈接庫。
12.一種基于Webkit內核提供網頁瀏覽的裝置,其特征在于,包括 接口導出模塊,用于設置一 Webkit內核的頁面對象導出接口 ; 內核啟動模塊,用于在第一獨立進程中啟動Webkit內核; 第一調用模塊,用于在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;并 第二調用模塊,用于通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。
13.根據權利要求12所述的裝置,其特征在于,所述第一調用模塊包括 工廠方法獲取子模塊,用于獲得所述頁面對象導出接口提供的工廠方法; 工廠對象創建子模塊,用于調用所述工廠方法創建工廠對象; 頁面對象創建子模塊,用于調用所述工廠對象創建基于Webkit內核的頁面對象。
14.根據權利要求12所述的裝置,其特征在于 所述第二調用模塊通過所述頁面對象提供的頁面創建方法,調用所述第一獨立進程中的Weblkit內核創建頁面窗口,并在該頁面窗口中進行基于Webkit內核的頁面內容加載。
15.根據權利要求14所述的裝置,其特征在于,在第二獨立進程中進行所述頁面內容加載, 所述加載包括 根據接收到的http請求獲取頁面內容;對獲取到的頁面內容進行解析; 對解析結果執行js操作; 根據js操作結果建立dom樹; 對dom樹進行渲染和展現。
16.根據權利要求14所述的裝置,其特征在于,所述頁面瀏覽操作包括 頁面跳轉,和/或,頁面窗口移動,和/或,頁面停止加載,和/或,頁面刷新,和/或,頁面的前進、后退,和/或,頁面銷毀。
17.根據權利要求16所述的裝置,其特征在于,所述第二調用模塊包括 導航調用子模塊,用于通過所述頁面對象提供的Navigate方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面跳轉操作; 和/或,移動調用子模塊,用于通過所述頁面對象提供的R印osition方法,調用所述獨立進程中的Weblkit內核告知所述頁面窗口跟隨外部窗口的移動而移動; 和/或,停止調用子模塊,用于通過所述頁面對象提供的Stop方法,調用所述獨立進程中的Weblkit內核停止在該頁面窗口中加載頁面內容; 和/或,刷新調用子模塊,用于通過所述頁面對象提供的Reload方法,調用所述獨立進程中的Weblkit內核器刷新該頁面窗口中的頁面內容; 和/或,頁面后退調用子模塊,用于通過所述頁面對象提供的GoBack方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面后退操作; 和/或,頁面前進調用子模塊,用于通過所述頁面對象提供的GoForward方法,調用所述獨立進程中的Weblkit內核在該頁面窗口中進行頁面前進操作; 和/或,銷毀調用子模塊,用于通過所述頁面對象提供的Destroy方法,調用所述獨立進程中的Weblkit內核銷毀該頁面對象。
18.根據權利要求12至17任一所述的裝置,其特征在于,所述第二調用模塊包括 構造子模塊,用于構造參數對象,并在所述參數對象中填充目標訪問的網址和窗口句柄; 參數賦值子模塊,用于將填充后的參數對象作為參數值傳遞給所述頁面對象提供的頁面創建方法; 頁面創建子模塊,用于通過調用參數賦值后的頁面創建方法,實現與所述獨立進程中的Weblkit內核進行通信。
19.根據權利要求12所述的裝置,其特征在于 所述接口導出模塊通過動態鏈接庫提供Webkit內核的頁面對象導出接口。
20.根據權利要求19所述的裝置,其特征在于,還包括 路徑查找模塊,用于訪問注冊表,查找注冊表中所述動態鏈接庫的存儲路徑; 加載模塊,用于從所述存儲路徑加載所述動態鏈接庫。
21.根據權利要求20所述的裝置,其特征在于,還包括 更新模塊,用于Webkit內核升級后更新所述動態鏈接庫的版本,并將新版本的動態鏈接庫保存到不同于舊版本的存儲路徑。
22.根據權利要求21所述的裝置,其特征在于 多個第二獨立進程通過從同一存儲路徑加載同一所述動態鏈接庫。
全文摘要
本申請提供了一種基于Webkit內核提供網頁瀏覽的方法及裝置,以解決瀏覽器中使用Webbrowser內核控件而帶來的安全性弱的問題。所述方法包括設置一Webkit內核的頁面對象導出接口;在第一獨立進程中啟動Webkit內核;在第二獨立進程中調用所述頁面對象導出接口創建基于Webkit內核的頁面對象;并通過所述頁面對象調用所述第一獨立進程中的Weblkit內核,進行基于Webkit內核的頁面瀏覽操作和頁面內容加載。本申請能很好地解決瀏覽器中Webbrowser內核版本落后、安全性薄弱、不支持非微軟平臺的問題,和直接使用webkit核心導致的技術門檻高、升級困難、安裝包過大等問題。
文檔編號G06F9/44GK102681850SQ201210139290
公開日2012年9月19日 申請日期2012年5月7日 優先權日2012年5月7日
發明者任寰, 劉慶平 申請人:奇智軟件(北京)有限公司