專利名稱:瀏覽器控件恢復(fù)方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,特別涉及一種瀏覽器控件恢復(fù)方法及系統(tǒng)。
背景技術(shù):
ActiveX控件以前也叫做OLE控件或OCX控件,它是一些軟件組件或?qū)ο螅梢詫⑵洳迦氲絎EB網(wǎng)頁或其它應(yīng)用程序中。ActiveX控件技術(shù)是國際上通用的基于Windows平臺的軟件技術(shù),除了在線殺毒控件之外,許多軟件均采用此種方式開發(fā),例如Flash動畫播放控件、Microsoft MediaPlayer控件、CNNIC通用網(wǎng)址控件、網(wǎng)絡(luò)實名控件等。ActiveX控件需要嵌入到網(wǎng)頁中,控件和頁面會在同一個進程下運行。因此,當ActiveX控件出現(xiàn)崩潰后,會導(dǎo)致整個網(wǎng)頁退出,正在書寫的郵件博客等工作會丟失,影響了頁面操作的穩(wěn)定性。同時,現(xiàn)有的崩潰恢復(fù)機制是強制重新啟動一個頁面進程,這種恢復(fù)機制往往需要花費較多的時間,影響用戶的使用效率。
發(fā)明內(nèi)容
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種瀏覽器控件恢復(fù)方法及系統(tǒng)。依據(jù)本發(fā)明的一個方面,提供了一種瀏覽器控件恢復(fù)方法,其包括步驟截獲瀏覽器的頁面進程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面進程中運行;在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行;代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象;代理對象定期詢問活動對象的運行信息,并保存所述運行信息;其中,所述代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,進一步為 代理對象向獨立進程發(fā)送所述激活信息和所述運行信息;根據(jù)所述激活信息,在獨立進程中重新創(chuàng)建活動對象;根據(jù)所述運行信息,獲取原活動對象的中斷位置,令新創(chuàng)建的活動對象在所述中斷位置處繼續(xù)運行??蛇x地,所述代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象的步驟,具體包括代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰;如果活動對象卡死,則代理對象停止與所述活動對象的通信并向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,如果獨立進程崩潰,則創(chuàng)建新的獨立進程,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象??蛇x地,所述代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰的步驟,具體包括代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰。可選地,所述代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰的步驟中,如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項活動對象所在線程的消息循環(huán)不活動,活動對象的窗口掛起,活動對象線程的一直忙,則判定活動對象卡死;如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項獨立進程中的主窗口不存在,活動對象中的窗口不存在,則判定獨立進程崩潰??蛇x地,所述代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,進一步包括所述代理對象通過與獨立進程通信判斷活動對象是否中斷,如果是,提示用戶活動對象中斷;接收用戶的重激活指令;代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象??蛇x地,所述在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行,之后還包括步驟代理對象通過與獨立進程通信,調(diào)用活動對象,和/或,代理對象通過與獨立進程通信,被活動對象調(diào)用。可選地,頁面進程為每個頁面創(chuàng)建一個頁面線程,截獲頁面線程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面線程中運行;獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,在所述對象線程中創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在對象線程中運行;代理對象通過與對象線程通信判斷活動對象是否中斷,如果是,代理對象向?qū)ο缶€程發(fā)送激活信息,在對象線程中重新創(chuàng)建活動對象??蛇x地,所述方法還包括當活動對象出現(xiàn)問題時,對運行所述活動對象的對象線程執(zhí)行掛起、降低權(quán)限或終止操作。可選地,所述方法還包括獨立進程創(chuàng)建活動對象時,代理對象將頁面進程或頁面線程的通信句柄和代理對象標識作為通信標識,傳送給獨立進程或?qū)ο缶€程;獨立進程創(chuàng)建活動對象后,活動對象將獨立進程或?qū)ο缶€程的通信句柄和活動對象標識作為通信標識,傳送給代理對象??蛇x地,所述獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,包括
獨立進程創(chuàng)建主線程,主線程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,所述主線程用于維護全局配置。可選地,所述活動對象包括ActiveX對象。根據(jù)本發(fā)明的另一方面,提供了一種瀏覽器控件恢復(fù)系統(tǒng),其包括頁面進程模塊,適于截獲瀏覽器的頁面進程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面進程中運行;獨立進程模塊,適于在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行;恢復(fù)模塊,適于令代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象;所述恢復(fù)模塊還適于令代理對象定期詢問活動對象的運行信息,并保存所述運行/[目息;以及,還適于在活動對象中斷時,令代理對象向獨立進程發(fā)送所述激活信息和所述運行信息,根據(jù)所述激活信息在獨立進程中重新創(chuàng)建活動對象,并且,根據(jù)所述運行信息,獲取原活動對象的中斷位置,令新創(chuàng)建的活動對象在所述中斷位置處繼續(xù)運行??蛇x地,所述恢復(fù)模塊包括判斷子模塊,適于令代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰;卡死子模塊,適于在活動對象卡死時,令代理對象停止與所述活動對象的通信并向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象;崩潰子模塊,適于在獨立進程崩潰時,創(chuàng)建新的獨立進程,令代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象??蛇x地,所述判斷子模塊,適于令代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰??蛇x地,所述判斷子模塊中,如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項活動對象所在線程的消息循環(huán)不活動,活動對象的窗口掛起,活動對象線程的一直忙,則判定活動對象卡死;如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項獨立進程中的主窗口不存在,活動對象中的窗口不存在,則判定獨立進程崩潰??蛇x地,所述系統(tǒng)還包括交互模塊,適于在活動對象中斷的情況下,提示用戶活動對象中斷,以及接收用戶的重激活指令,并將所述重激活指令發(fā)送給所述恢復(fù)模塊??蛇x地,所述系統(tǒng)還包括調(diào)用模塊,適于令代理對象通過與獨立進程通信,調(diào)用活動對象,和/或,代理對象通過與獨立進程通信,被活動對象調(diào)用??蛇x地,所述頁面進程模塊,還適于令頁面進程為每個頁面創(chuàng)建一個頁面線程,截獲頁面線程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面線程中運行;
所述獨立進程模塊,還適于令獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,在所述對象線程中創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在對象線程中運行;所述恢復(fù)模塊,還適于令代理對象通過與對象線程通信判斷活動對象是否中斷,如果是,代理對象向?qū)ο缶€程發(fā)送激活信息,在對象線程中重新創(chuàng)建活動對象。可選地,所述系統(tǒng)還包括錯誤處理模塊,適于當活動對象出現(xiàn)問題時,對運行所述活動對象的對象線程執(zhí)行掛起、降低權(quán)限或終止操作。可選地,所述系統(tǒng)還包括代理對象通信標識傳送模塊,適于令獨立進程模塊創(chuàng)建活動對象時,代理對象將頁面進程或頁面線程的通信句柄和代理對象標識作為通信標識,傳送給獨立進程或?qū)ο缶€程;活動對象通信標識傳送模塊,適于令獨立進程模塊創(chuàng)建活動對象后,活動對象將獨立進程或?qū)ο缶€程的通信句柄和活動對象標識作為通信標識,傳送給代理對象??蛇x地,所述頁面進程模塊,還適于令獨立進程創(chuàng)建主線程,主線程為每個頁面創(chuàng)建一個對象線程,所述主線程用于維護全局配置。本發(fā)明所述瀏覽器控件恢復(fù)方法及系統(tǒng),在頁面進程中創(chuàng)建代理對象,在獨立進程中創(chuàng)建活動對象,借助代理對象與獨立進程和/或其活動對象之間的通信,及時發(fā)現(xiàn)活動對象的中斷,并在發(fā)現(xiàn)活動對象中斷后重新創(chuàng)建活動對象,從而縮短了活動對象中斷后的恢復(fù)時間,提高了用戶的使用效率。另外,通過保存活動對象的運行信息,可以令重新創(chuàng)建的活動對象在原活動對象的中斷位置處開始運行,進一步提高了用戶的使用效率。上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式
。
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中圖1示出了根據(jù)本發(fā)明一個實施例的所述瀏覽器控件恢復(fù)方法流程圖;圖2示出了根據(jù)本發(fā)明一個實施例的所述瀏覽器控件恢復(fù)方法應(yīng)用于多頁面時的流程圖;圖3示出了根據(jù)本發(fā)明一個實施例的瀏覽器控件恢復(fù)系統(tǒng)的模塊結(jié)構(gòu)示意圖;圖4示出了根據(jù)本發(fā)明一個實施例的恢復(fù)模塊的內(nèi)部模塊結(jié)構(gòu)示意圖;圖5示出了根據(jù)本發(fā)明另一個實施例的瀏覽器控件恢復(fù)系統(tǒng)的模塊結(jié)構(gòu)示意圖;圖6示出了根據(jù)本發(fā)明再一個實施例的瀏覽器控件恢復(fù)系統(tǒng)的模塊結(jié)構(gòu)示意圖。
具體實施例方式下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。圖1示出了根據(jù)本發(fā)明一個實施例的所述瀏覽器控件恢復(fù)方法流程圖,如圖1所示,所述方法包括步驟SlOO :截獲瀏覽器的頁面進程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面進程中運行。其中,所述的活動對象就是真實的瀏覽器控件,例如真實的ActiveX對象,SPActiveX控件;所述的代理對象可以是模擬的瀏覽器控件,例如模擬的ActiveX控件,所述代理對象在頁面進程中運行。具體舉例說明本發(fā)明如下在網(wǎng)頁中有ActiveX控件的情況下,在瀏覽器創(chuàng)建ActiveX控件時,會根據(jù)控件CLSID或者ProgID查詢注冊表,其中可以通過CLSIDFromProgID獲取CLSID,由此查看系統(tǒng)是否已安裝相應(yīng)控件,若安裝則會繼續(xù)創(chuàng)建過程。瀏覽器通過調(diào)用CoGetClassObject得到相應(yīng)控件的IUnknown指針,然后通過標準接口進行相互操作。CoGetClassObject執(zhí)行過程為,通過CLSID去注冊表查詢ActiveX路徑,獲得ActiveX路徑后,調(diào)用LoadLibrary加載ActiveX控件,調(diào)用其導(dǎo)出函數(shù)DllGetClassObject獲得類廠指針(IClassFactory),然后調(diào)用IClassFactory的CreateInstance方法得到ActiveX控件對應(yīng)的IUnknown指針。在加載ActiveX控件時,攔截CoGetClassObject,創(chuàng)建一個ActiveX控件代理對象,該ActiveX控件代理對象包括一系列接口,例如IUnknown指針將會調(diào)用的很多標準接口,例如 IOleOb ject、IViewOb ject 等。然后在調(diào)用 IClassFactory 的 CreateInstance 時,將所創(chuàng)建的ActiveX控件代理對象返回給ActiveX控件的IUnknown指針。S200 :在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行。仍具體舉例說明本發(fā)明如下在頁面激活所述ActiveX控件時,提取出該控件的屬性、URL、大小等相關(guān)信息,然后創(chuàng)建一個獨立進程。具體來說,創(chuàng)建一個文件(document),在其中插入一個對象,該獨立進程調(diào)用CoGetClassObject,攔截該CoGetClassObject,再創(chuàng)建另一個ActiveX控件活動對象,該ActiveX控件活動對象包括一系列接口,例如IUnknown指針將會調(diào)用的很多標準接口,例如IOleObject、IViewObject等。然后在調(diào)用IClassFactory的CreateInstance時,將所創(chuàng)建的該另一個ActiveX控件活動對象返回給獨立進程的ActiveX控件的IUnknown指針。S300 :代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,結(jié)束流程;否則,直接結(jié)束流程。具體舉例說明本發(fā)明如下在所創(chuàng)建的兩個ActiveX控件對象中分別創(chuàng)建一個與該控件對象關(guān)聯(lián)的窗口以用來進行通信。具體來說兩個控件對象可以針對大小、焦點、刷新、腳本以及其他信息進行交互。根據(jù)本發(fā)明的方法可以攔截以上兩個進程中的所有請求,通過預(yù)先創(chuàng)建的兩個ActiveX控件對象來實現(xiàn)這兩個進程之間的信息交互。由此ActiveX控件的具體計算過程在獨立進程中進行,因而不會影響原網(wǎng)頁的進程。
所述步驟S300進一步包括S310 :代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰。具體地,代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰。如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項活動對象所在線程的消息循環(huán)不活動,活動對象的窗口掛起,活動對象線程的一直忙,則判定活動對象卡死;如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項獨立進程中的主窗口不存在,活動對象中的窗口不存在,則判定獨立進程崩潰。代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,具體來說可以用很多方式實現(xiàn)這一監(jiān)控動作,舉例來說,可以在開啟的獨立進程中為每一個活動對象綁定一個消息窗口 ;令頁面進程的代理對象定期地查詢該消息窗口,以監(jiān)控該活動對象是否正常運行。S320 :如果活動對象卡死,則代理對象停止與所述活動對象的通信并向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象。S330:如果獨立進程崩潰,則創(chuàng)建新的獨立進程,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象。通過上述方法步驟的執(zhí)行,能夠及時識別活動對象的中斷,并在活動對象中斷后對其及時重新激活,縮短響應(yīng)時間。另外,所述步驟S200之后還可以包括步驟Pl :代理對象定期詢問活動對象的運行信息,并保存所述運行信息。相應(yīng)地,所述步驟S300中,所述代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,進一步為代理對象向獨立進程發(fā)送所述激活信息和所述運行信息;根據(jù)所述激活信息,在獨立進程中重新創(chuàng)建活動對象;根據(jù)所述運行信息,獲取原活動對象的中斷位置,令新創(chuàng)建的活動對象在所述中斷位置處繼續(xù)運行。其中,所述激活信息主要是活動對象的屬性、URL、位置、大小等信息;所述運行信息是活動對象的運行進度信息。通過采用所述步驟P1,以及對所述步驟S300進行相應(yīng)的改變,可以保證活動對象能夠在中斷位置處開始重新運行,相比現(xiàn)有技術(shù)中完全的重新啟動,顯然進一步提高了響應(yīng)效率。所述步驟S300中還可以由用戶選擇是否重新激活已經(jīng)中斷的活動對象以提高與用戶的交互性能,具體地,其可以進一步包括所述代理對象通過與獨立進程通信判斷活動對象是否中斷,如果是,提示用戶活動對象中斷;接收用戶的重激活指令;代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象。所述步驟S300之后還可以包括步驟S400 :代理對象通過與獨立進程通信,調(diào)用活動對象,和/或,代理對象通過與獨立進程通信,被活動對象調(diào)用。
通常一個瀏覽器往往可以打開很多個頁面來瀏覽不同的網(wǎng)頁,參見圖2,所述方法還可以應(yīng)用于多頁面的情況,此時可以多線程方式對應(yīng)多個頁面運行多個活動對象,具體地,所述方法步驟如下:S100’:頁面進程為每個頁面創(chuàng)建一個頁面線程,截獲頁面線程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面線程中運行.
S200’:獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,在所述對象線程中創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在對象線程中運行。該步驟中,獨立進程創(chuàng)建主線程,主線程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,所述主線程用于維護全局配置。并且,該步驟中,獨立進程創(chuàng)建活動對象時,代理對象將頁面進程或頁面線程的通信句柄和代理對象標識作為通信標識,傳送給獨立進程或?qū)ο缶€程;獨立進程創(chuàng)建活動對象后,活動對象將獨立進程或?qū)ο缶€程的通信句柄和活動對象標識作為通信標識,傳送給代理對象。S300’:代理對象通過與對象線程通信判斷活動對象是否中斷,如果是,代理對象向?qū)ο缶€程發(fā)送激活信息,在對象線程中重新創(chuàng)建活動對象。所述活動對象包括ActiveX對象,以ActiveX對象為例,則ActiveX對象在對象線程中運行,當ActiveX對象出現(xiàn)問題時,例如ActiveX對象陷入死循環(huán)時,可以對運行所述ActiveX對象的對象線程執(zhí)行掛起操作,使得所述對象線程暫時不能運行;或者對運行所述ActiveX對象的對象線程執(zhí)行降低權(quán)限操作;或者對運行所述ActiveX對象的對象線程執(zhí)行終止操作,終止所述的對象線程。
在本申請所述的方法中,例如,針對IE瀏覽器中ActiveX控件的執(zhí)行過程中,可以創(chuàng)建模擬的ActiveX類廠,取代真實的ActiveX類廠,在頁面進程或頁面線程模擬標準方
式,創(chuàng)建代理對象,例如,參考如下的模型:
權(quán)利要求
1.一種瀏覽器控件恢復(fù)方法,其包括: 截獲瀏覽器的頁面進程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面進程中運行; 在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行; 代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象; 代理對象定期詢問活動對象的運行信息,并保存所述運行信息; 所述代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,進一步為: 代理對象向獨立進程發(fā)送所述激活信息和所述運行信息; 根據(jù)所述激活信息,在獨立進程中重新創(chuàng)建活動對象; 根據(jù)所述運行信息,獲取原活動對象的中斷位置,令新創(chuàng)建的活動對象在所述中斷位置處繼續(xù)運行。
2.如權(quán)利要求1所述的方法,其特征在于,所述代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象的步驟,具體包括: 代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰; 如果活動對象卡死,則代理對象停止與所述活動對象的通信并向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象, 如果獨立進程崩潰,則創(chuàng)建新的獨立進程,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象。
3.如權(quán)利要求2所述的方法,其特征在于,所述代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰的步驟,具體包括: 代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰。
4.如權(quán)利要求3所述的方法,其特征在于,所述代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰的步驟中, 如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項:活動對象所在線程的消息循環(huán)不活動,活動對象的窗口掛起,活動對象線程的一直忙,則判定活動對象卡死; 如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項:獨立進程中的主窗口不存在,活動對象中的窗口不存在,則判定獨立進程崩潰。
5.如權(quán)利要求1所述的方法,其特征在于,所述代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象,進一步包括: 所述代理對象通過與獨立進程通信判斷活動對象是否中斷,如果是,提示用戶活動對象中斷;接收用戶的重激活指令; 代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象。
6.如權(quán)利要求1所述的方法,其特征在于,所述在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行,之后還包括步驟: 代理對象通過與獨立進程通信,調(diào)用活動對象,和/或, 代理對象通過與獨立進程通信,被活動對象調(diào)用。
7.如權(quán)利要求1所述的方法,其特征在于, 頁面進程為每個 頁面創(chuàng)建一個頁面線程,截獲頁面線程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面線程中運行; 獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,在所述對象線程中創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在對象線程中運行; 代理對象通過與對象線程通信判斷活動對象是否中斷,如果是,代理對象向?qū)ο缶€程發(fā)送激活信息,在對象線程中重新創(chuàng)建活動對象。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,還包括: 當活動對象出現(xiàn)問題時,對運行所述活動對象的對象線程執(zhí)行掛起、降低權(quán)限或終止操作。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,還包括: 獨立進程創(chuàng)建活動對象時,代理對象將頁面進程或頁面線程的通信句柄和代理對象標識作為通信標識,傳送給獨立進程或?qū)ο缶€程; 獨立進程創(chuàng)建活動對象后,活動對象將獨立進程或?qū)ο缶€程的通信句柄和活動對象標識作為通信標識,傳送給代理對象。
10.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,包括: 獨立進程創(chuàng)建主線程,主線程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,所述主線程用于維護全局配置。
11.如權(quán)利要求1所述的方法,其特征在于,所述活動對象包括ActiveX對象。
12.一種瀏覽器控件恢復(fù)系統(tǒng),其包括: 頁面進程模塊,適于截獲瀏覽器的頁面進程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面進程中運行; 獨立進程模塊,適于在獨立于瀏覽器頁面進程的獨立進程中,創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在獨立進程中運行; 恢復(fù)模塊,適于令代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否中斷,如果是,代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象; 所述恢復(fù)模塊還適于令代理對象定期詢問活動對象的運行信息,并保存所述運行信息;以及, 還適于在活動對象中斷時,令代理對象向獨立進程發(fā)送所述激活信息和所述運行信息,根據(jù)所述激活信息在獨立進程中重新創(chuàng)建活動對象,并且,根據(jù)所述運行信息,獲取原活動對象的中斷位置,令新創(chuàng)建的活動對象在所述中斷位置處繼續(xù)運行。
13.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述恢復(fù)模塊包括:判斷子模塊,適于令代理對象通過與獨立進程和/或其活動對象通信判斷活動對象是否卡死和/或獨立進程是否崩潰; 卡死子模塊,適于在活動對象卡死時,令代理對象停止與所述活動對象的通信并向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象; 崩潰子模塊,適于在獨立進程崩潰時,創(chuàng)建新的獨立進程,令代理對象向獨立進程發(fā)送激活信息,在獨立進程中重新創(chuàng)建活動對象。
14.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述判斷子模塊,適于令代理對象定期詢問獨立進程和/或其活動對象的運行狀態(tài)信息,并根據(jù)所述運行狀態(tài)信息判斷活動對象是否卡死和/或獨立進程是否崩潰。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述判斷子模塊中, 如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項:活動對象所在線程的消息循環(huán)不活動,活動對象的窗口掛起,活動對象線程的一直忙,則判定活動對象卡死; 如果根據(jù)所述運行狀態(tài)信息發(fā)現(xiàn)以下至少一項:獨立進程中的主窗口不存在,活動對象中的窗口不存在,則判定獨立進程崩潰。
16.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 交互模塊,適于在活動對象中斷的情況下,提示用戶活動對象中斷,以及接收用戶的重激活指令,并將所述重激活指令發(fā)送給所述恢復(fù)模塊。
17.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 調(diào)用模塊,適于令代理對象通過與獨立進程通信,調(diào)用活動對象,和/或,代理對象通過與獨立進程通信,被活動對象調(diào)用。
18.如權(quán)利要求12所述的系統(tǒng),其特征在于, 所述頁面進程模塊,還適于令頁面進程為每個頁面創(chuàng)建一個頁面線程,截獲頁面線程創(chuàng)建活動對象的過程,創(chuàng)建代理對象替換實際要創(chuàng)建的活動對象,所述代理對象在頁面線程中運行; 所述獨立進程模塊,還適于令獨立進程為每個頁面創(chuàng)建一個獨立于頁面線程的對象線程,在所述對象線程中創(chuàng)建所述實際要創(chuàng)建的活動對象,所述活動對象在對象線程中運行; 所述恢復(fù)模塊,還適于令代理對象通過與對象線程通信判斷活動對象是否中斷,如果是,代理對象向?qū)ο缶€程發(fā)送激活信息,在對象線程中重新創(chuàng)建活動對象。
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 錯誤處理模塊,適于當活動對象出現(xiàn)問題時,對運行所述活動對象的對象線程執(zhí)行掛起、降低權(quán)限或終止操作。
20.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 代理對象通信標識傳送模塊,適于令獨立進程模塊創(chuàng)建活動對象時,代理對象將頁面進程或頁面線程的通信句柄和代理對象標識作為通信標識,傳送給獨立進程或?qū)ο缶€程; 活動對象通信標識傳送模塊,適于令獨立進程模塊創(chuàng)建活動對象后,活動對象將獨立進程或?qū)ο缶€程的通信句柄和活動對象標識作為通信標識,傳送給代理對象。
全文摘要
本發(fā)明公開了一種瀏覽器控件恢復(fù)方法及系統(tǒng),涉及網(wǎng)絡(luò)通信領(lǐng)域。所述系統(tǒng)包括頁面進程模塊;獨立進程模塊;恢復(fù)模塊;所述恢復(fù)模塊還適于令代理對象定期詢問活動對象的運行信息,并保存所述運行信息;以及,還適于在活動對象中斷時,令代理對象向獨立進程發(fā)送所述激活信息和所述運行信息,根據(jù)所述激活信息在獨立進程中重新創(chuàng)建活動對象,并且,根據(jù)所述運行信息,獲取原活動對象的中斷位置,令新創(chuàng)建的活動對象在所述中斷位置處繼續(xù)運行。本發(fā)明能夠及時發(fā)現(xiàn)活動對象的中斷,并在發(fā)現(xiàn)活動對象中斷后重新創(chuàng)建活動對象,從而縮短了活動對象中斷后的恢復(fù)時間,提高了用戶的使用效率。
文檔編號G06F11/07GK103077092SQ201210572060
公開日2013年5月1日 申請日期2012年12月25日 優(yōu)先權(quán)日2012年12月25日
發(fā)明者李錦偉, 賀躍松, 陳志 , 付俁, 任寰 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司