一種活動對象創建方法、裝置及瀏覽器的製作方法
2023-05-07 18:58:21 2
專利名稱:一種活動對象創建方法、裝置及瀏覽器的製作方法
技術領域:
本發明涉及計算機網絡技術領域,具體涉及一種活動對象創建方法、裝置及瀏覽器。
背景技術:
ActiveX插件以前也叫做0LE(0bject Linking and Embedding,對象連結與嵌入)控制項或OCX (OLE Control extension,對象類別擴充)控制項,它是一些軟體組件或對象,可以將其嵌入到WEB網頁或其它應用程式中。當在瀏覽器中加載ActiveX插件時,也可稱該ActiveX插件為活動對象。如果ActiveX插件被嵌入到網頁中,在用戶打開網頁時,會自動觸發ActiveX插件的加載和播放。目前,很多網頁上都嵌入有各種音視頻插件,例如Flash插件,其內容可能是一些廣告或用戶並不關心的內容。只要用戶打開網頁就會在第一時間自動加載播放這些Flash內容。對於用戶來說,這種不必要的插件播放造成了用戶資源的浪費,例如浪費電力、帶寬和系統資源,而且還延長了頁面打開時間。現有技術提供了一種攔截Flash創建的方法,使用自帶的swf,替換需要創建的Flash來實現,swf是Flash本地的一種支持矢量和點陣圖形的動畫文件格式。但是由於在頁面的創建過程中可能需要與Flash進行交互,如果將Flash替換為swf,則因無法完成交互而無法創建Flash。當用戶需要重新播放Flash時,必須刷新頁面,重新創建Flash才能進行播放。
發明內容
鑑於上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的活動對象創建方法和相應的活動對象創建裝置及瀏覽器。根據本發明的一個方面,提供了另一種活動對象創建方法,包括在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行修改,阻止執行所述活動對象實現的功能;根據用戶發起的執行所述活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行再修改,繼續執行所述活動對象實現的功能。根據本發明的另一方面,提供了另一種活動對象創建裝置,包括阻止模塊,適於在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行修改,阻止執行所述活動對象實現的功能;執行模塊,適於根據用戶發起的執行所述活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行再修改,繼續執行所述活動對象實現的功能。根據本發明的再一方面,提供了一種包括上述活動對象創建裝置的瀏覽器。根據本發明的一個方面提供的方案,在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或對活動對象的屬性進行修改,阻止執行活動對象實現的功能;在用戶發起執行活動對象實現的功能的請求後,通過取消攔截線程消息循環中的定時消息或對活動對象的屬性進行再修改,繼續執行活動對象實現的功能。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求執行活動對象實現的功能時,無需刷新頁面,實現了活動對象實現的功能的即點即執行。根據本發明的一個方面提供的方案,在瀏覽器的頁面進程創建活動對象之前,默認阻止創建該活動對象;在用戶發起執行活動對象實現的功能的請求後,繼續創建活動對象,並在活動對象創建完成後,執行活動對象實現的功能。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求執行活動對象實現的功能時,無需刷新頁面,實現了活動對象實現的功能的即點即執行。上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,並且為了讓本發明的上述和其它目的、特徵和優點能夠更明顯易懂,以下特舉本發明的具體實施方式
。
通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對於本領域普通技術人員將變得清楚明了。附圖僅用於示出優選實施方式的目的,而並不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中圖1示出了根據本發明第一個實施例的活動對象創建方法的流程圖;圖2示出了根據本發明第二個實施例的活動對象創建方法的流程圖;圖3示出了根據本發明第三個實施例的活動對象創建方法的流程圖;圖4示出了根據本發明第四個實施例的活動對象創建方法的流程圖;圖5示出了根據本發明第五個實施例的活動對象創建裝置的結構框圖;圖6示出了根據本發明第六個實施例的活動對象創建裝置的結構框圖;圖7示出了根據本發明第七個實施例的活動對象創建裝置的結構框圖;圖8示出了根據本發明第八個實施例的活動對象創建裝置的結構框圖。
具體實施例方式下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這裡闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,並且能夠將本公開的範圍完整的傳達給本領域的技術人員。在以下幾個實施例中,以創建Flash插件為例進行說明,但本發明不僅限於是Flash插件,還可以是其它ActiveX插件,如百度影音、QVOD (快播)等插件。圖1示出了根據本發明第一個實施例的活動對象創建方法100的流程圖。如圖1所示,方法100始於步驟S101,其中在瀏覽器的頁面進程創建Flash插件之前,阻止創建該Flash插件。具體來說,在頁面中有Flash插件的情況下,瀏覽器的頁面進程通過CLSIDFromProgID方法獲取Flash插件的類標識(CLSID)或者組件的字符串標識符(ProgID),按照現有流程,隨後頁面進程根據Flash插件的CLSID或ProgID查詢註冊表,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。但本方法與現有流程不同的是,在獲取CLSID或ProgID後,判斷其是否為Flash插件的CLSID或ProgID,若是則停止執行查詢註冊表的動作,這樣該Flash插件就不會被創建。需要說明的是,停止執行查詢註冊表的動作是阻止創建Flash插件的一種可選的實施方式,本方法也可在查詢註冊表確認已安裝Flash插件之後,阻止進一步創建該Flash插件。通過本步驟,雖然頁面中有Flash插件,但在頁面打開後由於阻止創建該Flash插件,頁面中並不會播放對應的Flash內容。隨後,方法100進入步驟S102,其中根據用戶發起的執行Flash插件功能的請求,繼續創建Flash插件,在創建完成後執行Flash插件的功能,即播放對應的Flash內容。在頁面打開後,如果用戶想要觀看Flash內容,可以點擊播放Flash,頁面進程收到用戶點擊播放Flash的請求,不再阻止Flash插件的創建,繼續創建Flash插件。以之前停止執行查詢註冊表的動作為例,頁面進程根據Flash插件的CLSID或ProgID繼續執行查詢註冊表的操作,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。在Flash插件創建完成後,按照默認的屬性就會播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。根據本實施例提供的活動對象創建方法,在瀏覽器的頁面進程創建Flash插件之前,默認阻止創建該Flash插件;在用戶發起播放Flash的請求後,繼續創建Flash插件,並在Flash插件創建完成後,播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本實施例提供的方法在加載頁面時,默認阻止創建Flash插件,將有限的資源用於加載頁面,提升了頁面的加載速度。圖2示出了根據本發明第二個實施例的活動對象創建方法200的流程圖。與上述第一個實施例不同的是,在用戶發起執行活動對象實現的功能的請求之後,通過在頁面進程中創建代理對象,而在獨立進程中繼續創建活動對象,使得真實的Flash插件與頁面進程分離。如圖2所示,方法200始於步驟S201,在瀏覽器的頁面進程創建Flash插件之前,阻止創建該Flash插件。在頁面中有Flash插件的情況下,瀏覽器的頁面進程通過CLSIDFromProgID 方法獲取 Flash 插件的 CLSID 或者 ProgID,在獲取 CLSID 或 ProgID 後,判斷其是否為Flash插件的CLSID或ProgID,若是則停止執行查詢註冊表的動作,這樣該Flash插件就不會被創建。停止執行查詢註冊表的動作是阻止創建Flash插件的一種可選的實施方式,本方法也可在查詢註冊表確認已安裝Flash插件之後,阻止進一步創建該Flash插件。通過本步驟,雖然頁面中有Flash插件,但在頁面打開後由於阻止創建該Flash插件,頁面中並不會播放對應的Flash內容。隨後,方法200進入步驟S202,其中根據用戶發起的執行Flash插件功能的請求,截獲瀏覽器的頁面進程創建Flash插件活動對象的操作,在瀏覽器的頁面進程創建Flash插件代理對象替換實際要創建的Flash插件活動對象,該Flash插件代理對象在頁面進程中運行。具體來說,在頁面打開後,如果用戶想要觀看Flash內容,可以點擊播放Flash,頁面進程收到用戶點擊播放Flash的請求,不再阻止Flash插件的創建,繼續創建Flash插件。以之前停止執行查詢註冊表的動作為例,頁面進程根據Flash插件的CLSID或ProgID繼續執行查詢註冊表的操作,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。這裡,在頁面進程準備進一步創建Flash插件時,攔截CoGetClassOb ject,創建Flash插件代理對象,該Flash插件代理對象包括一系列接口,包括IUnknown指針(本文也稱為接口指針)將會調用的很多標準接口,例如IOleObject、IViewObject 等。然後在調用 IClassFactory 的 CreateInstance 時,將所創建的 Flash 插件代理對象返回給頁面進程的IUnknown指針。隨後,方法200進入步驟S203,其中創建獨立於頁面進程的獨立進程,在該獨立進程中,倉Il建Flash插件活動對象,這裡的Flash插件活動對象才是真正的Flash插件。具體地,在頁面進程激活Flash插件代理對象時,提取出該Flash插件的屬性、URL、大小等相關信息,然後創建一個獨立進程。具體來說,創建一個文件(document),在其中插入一個對象(object),該獨立進程調用CoGetClassObject,攔截該CoGetClassObject,創建一個Flash插件活動對象。該Flash插件活動對象包括一系列的接口,包括IUnknown指針將會調用的很多標準接口,例如IOleObject、IViewObject等。然後在調用IClassFactory的CreateInstance時,將所創建的Flash插件活動對象返回給獨立進程的IUnknown指針。接著,在Flash插件代理對象和Flash插件活動對象中分別創建與插件對象關聯的窗口,用於使Flash插件代理對象和Flash插件活動對象進行通信。通過這兩個窗口,兩個對象可以針對Flash的大小、焦點、刷新、腳本以及其它信息進行交互。隨後,方法200進入步驟S204,通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,和/或,Flash插件代理對象與獨立進程通信被Flash插件活動對象調用,執行Flash插件活動對象實現的功能。在Flash插件活動對象創建完成後,根據用戶點擊播放Flash的請求,通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,使Flash插件活動對象播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。根據本實施例提供的活動對象創建方法,在瀏覽器的頁面進程創建Flash插件之前,默認阻止創建該Flash插件;在用戶發起播放Flash的請求後,在獨立進程中創建真正的Flash插件,並在真正的Flash插件創建完成後,通過調用真正的Flash插件播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本實施例提供的方法在加載頁面時,默認阻止創建Flash插件,將有限的資源用於加載頁面,提升了頁面的加載速度。進一步的,在本方法中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的Flash插件與頁面進程分離,從而使Flash插件出現問題時不會影響頁面進程,提高了瀏覽器的穩定性,尤其是當Flash插件出現病毒等安全性問題時,也不會對頁面進程產生影響,提高了瀏覽器的安全性;同時,頁面進程出現問題不會影響Flash插件的正常運行,提高了插件的穩定性。圖3示出了根據本發明第三個實施例的活動對象創建方法300的流程圖。如圖3所示,方法300始於步驟S301,其中在瀏覽器的頁面進程創建Flash插件之後,通過攔截線程消息循環中的定時消息或通過對Flash插件的屬性進行修改,阻止執行Flash插件實現的功能,即阻止Flash插件播放對應的Flash內容。在頁面中有Flash插件的情況下,瀏覽器的頁面進程通過CLSIDFromProgID方法獲取Flash插件的CLSID或者ProgID,隨後頁面進程根據Flash插件的CLSID或ProgID查詢註冊表,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。頁面進程通過調用CoGetClassObject得到Flash插件的IUnknown指針,根據IUnknown指針調用標準接口進行相關操作,由此完成Flash插件的創建。其中CoGetClassObject執行過程為通過CLSID去註冊表查詢ActiveX路徑,獲得ActiveX路徑後,調用LoadLibrary加載Flash插件,調用導出函數 DllGetClassObject 獲得類廠指針(IClassFactory),然後調用 IClassFactory 的CreatInstance方法得到Flash插件對應的IUnknown指針。在得到IUnknown指針的情況下,通過調用相關接口可以獲取Flash插件的默認屬性,並對其進行修改。通常情況下,Flash插件的默認屬性為播放,此時將Flash插件的默認屬性由播放修改為暫停或停止,就達到了阻止Flash插件播放Flash內容的目的。具體來說,根據Flash插件的IUnknown指針,可以查找到記錄Flash插件屬性的函數,調用該函數就可對Flash插件的屬性進行修改。對Flash插件的屬性進行修改是阻止Flash插件播放Flash內容的一種可選的實現方式,這種實現方式適用於播放動畫的Flash插件。本方法還提供了另一種阻止Flash插件播放Flash內容的實現方式,即攔截線程消息循環中的定時消息,這種實現方式的適用範圍更廣,播放動畫和視頻的Flash插件都適用。具體來說,線程消息循環中的定時消息(如0x401消息)是Flash插件的驅動消息,Flash插件只有定時接收到該定時消息,才會執行其相應的功能,本方法通過攔截該定時消息,使Flash插件接收不到這個消息,那麼Flash插件就不會播放對應的Flash內容。可選地,在步驟S301之後,方法300進入步驟S302,其中攔截Flash插件的繪製函數,調用自定義的繪製函數繪製自定義界面,在瀏覽器的指定位置顯示該自定義界面。在經過步驟S301阻止播放Flash內容後,在瀏覽器的原本該顯示Flash內容的指定位置就會出現停止播放的界面,本方法可以將該停止播放的界面替換為自定義界面,例如空屏、自定義圖片或自定義Flash等。具體採用的方法就是攔截Flash插件的繪製函數,該繪製函數用於繪製停止播放的界面,調用自定義的繪製函數繪製自定義界面並顯示。隨後,方法300進入步驟S303,其中根據用戶發起的執行Flash插件實現的功能的請求,通過取消攔截線程循環中的定時消息或者通過對Flash插件的屬性進行再修改,繼續執行Flash插件實現的功能,即繼續播放Flash內容。若在步驟S301中通過對Flash插件的屬性進行修改來阻止Flash插件播放Flash內容,本步驟則對Flash插件的屬性進行再修改,即將Flash插件的屬性由暫停或停止修改為播放,這樣Flash插件就可以繼續播放對應的Flash內容。若在步驟S301中通過攔截定時消息阻止Flash插件播放Flash內容,本步驟則取消攔截該定時消息,使Flash插件繼續播放對應的Flash內容。根據本實施例提供的活動對象創建方法,在瀏覽器的頁面進程創建Flash插件之後,通過攔截線程消息循環中的定時消息或對Flash插件的屬性進行修改,阻止Flash插件播放Flash內容;在用戶發起播放Flash的請求後,通過取消攔截線程消息循環中的定時消息或對Flash插件的屬性進行再修改,使Flash插件繼續播放Flash內容,由此實現了Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本方法在阻止Flash插件播放Flash內容時,已經創建了 Flash插件,在用戶再發起播放Flash的請求後,不需要再創建Flash插件,可以直接啟動播放,響應時間較短。圖4示出了根據本發明第四個實施例的活動對象創建方法400的流程圖。與上述第三個實施例不同的是,本實施例是在頁面進程中創建代理對象,而在獨立進程中繼續創建活動對象,使得真實的Flash插件與頁面進程分離。如圖4所示,方法400始於步驟S401,截獲瀏覽器的頁面進程創建Flash插件活動對象的操作,在瀏覽器的頁面進程創建Flash插件代理對象替換實際要創建的Flash插件活動對象,該Flash插件代理對象在頁面進程中運行。具體來說,在頁面中有Flash插件的情況下,在頁面進程準備創建Flash插件時,攔截CoGetClassObj ect,創建Flash插件代理對象,該Flash插件代理對象包括一系列接口,包括IUnknown指針將會調用的很多標準接口,例如IOleOb ject、IViewOb ject等。然後在調用IClassFactory的CreateInstance時,將所創建的Flash插件代理對象返回給頁面進程的IUnknown指針。隨後,方法400進入步驟S402,其中創建獨立於頁面進程的獨立進程,在該獨立進程中,倉Il建Flash插件活動對象,這裡的Flash插件活動對象才是真正的Flash插件。具體地,在頁面進程激活Flash插件代理對象時,提取出該Flash插件的屬性、URL、大小等相關信息,然後創建一個獨立進程。具體來說,創建一個文件(document),在其中插入一個對象(object),該獨立進程調用CoGetClassObject,攔截該CoGetClassObject,創建一個Flash插件活動對象。該Flash插件活動對象包括一系列的接口,包括IUnknown指針將會調用的很多標準接口,例如IOleObject、IViewObject等。然後在調用IClassFactory的CreateInstance時,將所創建的Flash插件活動對象返回給獨立進程的IUnknown指針。接著,在Flash插件代理對象和Flash插件活動對象中分別創建與插件對象關聯的窗口,用於使Flash插件代理對象和Flash插件活動對象進行通信。通過這兩個窗口,兩個對象可以針對Flash的大小、焦點、刷新、腳本以及其它信息進行交互。隨後,方法400進入步驟S403,其中通過攔截線程消息循環中的定時消息或通過對Flash插件活動對象的屬性進行修改,阻止執行Flash插件活動對象實現的功能,即阻止Flash插件播放對應的Flash內容。本步驟的相關內容與實施例三類似,不同之處在於本步驟是在獨立進程中執行的,而實施例三的相應步驟是在頁面進程中執行的。可選地,在步驟S403之後,方法400進入步驟S404,其中調用自定義的繪製函數繪製自定義界面,在瀏覽器的指定位置顯示該自定義界面。在經過步驟S403阻止播放Flash內容後,在瀏覽器的原本該顯示Flash內容的指定位置就會出現停止播放的界面,本方法可以將該停止播放的界面替換為自定義界面,如空屏、自定義圖片或自定義Flash等。具體可以採用以下兩種方法I)在獨立進程中攔截Flash插件活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面,通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,在瀏覽器的指定位置顯示自定義界面。具體來說,在獨立進程中攔截Flash插件活動對象的繪製函數,該繪製函數用於繪製停止播放的界面,調用自定義的繪製函數繪製自定義界面,通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,將該自定義界面通過創建的窗口發送給Flash插件代理對象,在指定位置顯示該自定義界面。2)在頁面進程中攔截Flash插件代理對象與獨立進程通信調用Flash插件活動對象的動作,調用自定義的繪製函數繪製自定義界面,在瀏覽器的指定位置顯示自定義界面。具體來說,在獨立進程中通過調用Flash插件活動對象的繪製函數繪製停止播放的界面,通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,可將該停止播放的界面通過創建的窗口發送給Flash插件代理對象,此時在頁面進程中攔截該動作,調用自定義的繪製函數繪製自定義界面,在指定位置顯示該自定義界面。隨後,方法400進入步驟S405,其中根據用戶發起的執行Flash插件實現的功能的請求,通過取消攔截線程循環中的定時消息或者通過對Flash插件的屬性進行再修改,繼續執行Flash插件實現的功能,即繼續播放Flash內容。其中繼續執行Flash插件實現的功能是通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,和/或,Flash插件代理對象與獨立進程通信被Flash插件活動對象調用而實現的。而取消攔截線程循環中的定時消息或者通過對Flash插件的屬性進行再修改是在獨立進程中進行的。根據本實施例提供的活動對象創建方法,在瀏覽器的頁面進程創建Flash插件代理對象,在獨立進程中創建真正的Flash插件,並在真正的Flash插件創建完成後,通過攔截線程消息循環中的定時消息或對Flash插件的屬性進行修改,阻止Flash插件播放Flash內容;在用戶發起播放Flash的請求後,通過取消攔截線程消息循環中的定時消息或對Flash插件的屬性進行再修改,使Flash插件繼續播放Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本方法在阻止Flash插件播放Flash內容時,已經創建了 Flash插件,在用戶再發起播放Flash的請求後,不需要再創建Flash插件,可以直接啟動播放,響應時間較短。進一步的,在本方法中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的Flash插件與頁面進程分離,從而使Flash插件出現問題時不會影響頁面進程,提高了瀏覽器的穩定性,尤其是當Flash插件出現病毒等安全性問題時,也不會對頁面進程產生影響,提高了瀏覽器的安全性;同時,頁面進程出現問題不會影響Flash插件的正常運行,提高了插件的穩定性。圖5示出了根據本發明第五個實施例的活動對象創建裝置的結構框圖。如圖5所示,該裝置包括阻止模塊510、第一創建模塊520和執行模塊530。進一步的,阻止模塊510、第一創建模塊520和執行模塊530都是頁面進程模塊500的子模塊。其中,阻止模塊510適於在瀏覽器創建活動對象之前,在頁面進程中阻止創建活動對象。第一創建模塊520根據用戶發起的執行活動對象實現的功能的請求,繼續在頁面進程中創建活動對象。執行模塊530適於在第一創建模塊520創建活動對象之後,執行活動對象實現的功能。以Flash插件為例,在頁面創建Flash插件之前,頁面進程通過CLSIDFromProgID方法獲取Flash插件的CLSID或者ProgID,判斷其是否為Flash插件的CLSID或ProgID,若是阻止模塊510阻止第一創建模塊520的動作,使其停止執行查詢註冊表,從而阻止創建Flash插件。在頁面進程收到用戶點擊播放Flash的請求後,阻止模塊510解除阻止,第一創建模塊520根據Flash插件的CLSID或ProgID繼續執行查詢註冊表的操作,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。在Flash插件創建完成後,執行模塊530按照默認的屬性就會播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。根據本實施例提供的活動對象創建裝置,在瀏覽器的頁面進程創建Flash插件之前,阻止模塊默認阻止創建該Flash插件;在用戶發起播放Flash的請求後,第一創建模塊繼續創建Flash插件,並在Flash插件創建完成後,執行模塊播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本實施例提供的裝置在加載頁面時,默認阻止創建Flash插件,將有限的資源用於加載頁面,提升了頁面的加載速度。圖6示出了根據本發明第六個實施例的活動對象創建裝置的結構框圖。如圖6所示,該裝置包括頁面進程模塊610和獨立進程模塊620,以及分別在頁面進程模塊610和獨立進程模塊620中創建的通信窗口 630。其中頁面進程模塊610包括子模塊阻止模塊611和第二創建模塊612 ;獨立進程模塊620包括子模塊第一創建模塊621和執行模塊622。阻止模塊611適於在瀏覽器創建活動對象之前,在頁面進程中阻止創建活動對象。第二創建模塊612適於根據用戶發起的執行活動對象實現的功能的請求,截獲瀏覽器的頁面進程加載活動對象的操作,在瀏覽器的頁面進程創建代理對象替換實際要創建的活動對象,代理對象在頁面進程中運行。第一創建模塊621適於在獨立於瀏覽器的頁面進程的獨立進程中,創建活動對象。執行模塊622通過代理對象經由通信窗口 630與獨立進程通信調用活動對象,和/或,代理對象經由通信窗口 630與獨立進程通信被活動對象調用,執行活動對象實現的功能。以Flash插件為例,在頁面創建Flash插件之前,頁面進程通過CLSIDFromProgID方法獲取Flash插件的CLSID或者ProgID,判斷其是否為Flash插件的CLSID或ProgID,若是阻止模塊611阻止第二創建模塊612的動作,使其停止執行查詢註冊表,從而阻止創建Flash插件。在頁面進程收到用戶點擊播放Flash的請求後,阻止模塊611解除阻止,第二創建模塊612根據Flash插件的CLSID或ProgID繼續執行查詢註冊表的操作,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。這裡,在頁面進程準備進一步創建Flash插件時,第二創建模塊612攔截CoGetClassOb ject,創建Flash插件代理對象,該Flash插件代理對象包括一系列接口,包括IUnknown指針將會調用的很多標準接口,例如 IOleOb ject、IViewOb ject 等。然後在調用 IClassFactory 的 CreateInstance時,將所創建的Flash插件代理對象返回給頁面進程的IUnknown指針。在頁面進程激活Flash插件代理對象時,提取出該Flash插件的屬性、URL、大小等相關信息,然後由獨立進程模塊620創建一個獨立進程。在該獨立進程調用CoGetClassObject時,第一創建模塊621攔截該CoGetClassObject,創建一個Flash插件活動對象。該Flash插件活動對象包括一系列的接口,包括IUnknown指針將會調用的很多標準接口,例如IOleOb ject、IViewOb ject等。然後在調用IClassFactory的CreateInstance時,將所創建的Flash插件活動對象返回給獨立進程的IUnknown指針。在Flash插件活動對象創建完成後,根據用戶點擊播放Flash的請求,執行模塊622通過Flash插件代理對象與獨立進程通信調用Flash插件活動對象,使Flash插件活動對象播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。
根據本實施例提供的活動對象創建裝置,在瀏覽器的頁面進程創建Flash插件之前,阻止模塊默認阻止創建該Flash插件;在用戶發起播放Flash的請求後,第一創建模塊在獨立進程中創建真正的Flash插件,並在真正的Flash插件創建完成後,執行模塊通過調用真正的Flash插件播放對應的Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了Flash內容的即點即播。而且,本實施例提供的裝置在加載頁面時,默認阻止創建Flash插件,將有限的資源用於加載頁面,提升了頁面的加載速度。進一步的,在本裝置中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的Flash插件與頁面進程分離,從而使Flash插件出現問題時不會影響頁面進程,提高了瀏覽器的穩定性,尤其是當Flash插件出現病毒等安全性問題時,也不會對頁面進程產生影響,提高了瀏覽器的安全性;同時,頁面進程出現問題不會影響Flash插件的正常運行,提高了插件的穩定性。圖7示出了根據本發明第七個實施例的活動對象創建裝置的結構框圖。如圖7所示,該裝置包括阻止模塊710和執行模塊720。進一步的,阻止模塊710和執行模塊720是頁面進程模塊700的子模塊。其中,阻止模塊710適於在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對活動對象的屬性進行修改,阻止執行活動對象實現的功能。執行模塊720適於根據用戶發起的執行活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對活動對象的屬性進行再修改,繼續執行活動對象實現的功能。以Flash插件為例,在頁面中有Flash插件的情況下,瀏覽器的頁面進程通過CLSIDFromProgID方法獲取Flash插件的CLSID或者ProgID,隨後頁面進程根據Flash插件的CLSID或ProgID查詢註冊表,用以查看系統是否已安裝該插件,若查看已安裝該插件則進一步創建該Flash插件。頁面進程通過調用CoGetClassObject得到Flash插件的IUnknown指針,根據IUnknown指針調用標準接口進行相關操作,由此完成Flash插件的創建。在得到IUnknown指針的情況下,阻止模塊710可以根據IUnkown指針查找到記錄Flash插件屬性的函數,調用該函數就可對Flash插件的屬性進行修改,如將Flash插件的默認屬性由播放修改為暫停或停止,就達到了阻止Flash插件播放Flash內容的目的。阻止模塊710也可以攔截線程消息循環中的定時消息,如0x401消息,阻止Flash插件播放Flash內容。在用戶發起的執行Flash插件實現的功能的請求後,執行模塊720可以通過對Flash插件的屬性進行再修改,如將Flash插件的屬性由暫停或停止修改為播放,這樣Flash插件就可以繼續播放對應的Flash內容。執行模塊720也可以通過取消攔截該定時消息,使Flash插件繼續播放對應的Flash內容。可選的,該裝置還可以包括繪製模塊730,繪製模塊730也是頁面進程模塊700的子模塊。繪製模塊730適於攔截活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面,在瀏覽器的指定位置顯示自定義界面。通過繪製模塊730可以將該停止播放的界面替換為自定義界面,如空屏、自定義圖片或自定義Flash等。根據本實施例提供的活動對象創建裝置,在瀏覽器的頁面進程創建Flash插件之後,阻止模塊通過攔截線程消息循環中的定時消息或對Flash插件的屬性進行修改,阻止Flash插件播放Flash內容;在用戶發起播放Flash的請求後,執行模塊通過取消攔截線程消息循環中的定時消息或對Flash插件的屬性進行再修改,使Flash插件繼續播放Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本裝置在阻止Flash插件播放Flash內容時,已經創建了 Flash插件,在用戶再發起播放Flash的請求後,不需要再創建Flash插件,可以直接啟動播放,響應時間較短。圖8示出了根據本發明第八個實施例的活動對象創建裝置的結構框圖。如圖8所示,該裝置包括頁面進程模塊810和獨立進程模塊820,以及分別在頁面進程模塊810和獨立進程模塊820中創建的通信窗口 830。其中頁面進程模塊810包括子模塊第一創建模塊811 ;獨立進程模塊820包括子模塊第二創建模塊821、阻止模塊822和執行模塊823。第一創建模塊811適於截獲瀏覽器的頁面進程加載活動對象的操作,在瀏覽器的頁面進程創建代理對象替換實際要創建的活動對象,代理對象在頁面進程中運行。第二創建模塊821適於在獨立於頁面進程的獨立進程中創建活動對象。阻止模塊822適於在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對活動對象的屬性進行修改,阻止執行活動對象實現的功能。執行模塊823適於根據用戶發起的執行活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對活動對象的屬性進行再修改,繼續執行活動對象實現的功能。執行模塊823進一步適於通過代理對象經由通信窗口 830與獨立進程通信調用活動對象,和/或,代理對象經由通信窗口 830與獨立進程通信被活動對象調用,繼續執行活動對象實現的功能。以Flash插件為例,在頁面中有Flash插件的情況下,在第一創建模塊811準備創建Flash插件時,攔截CoGetClassObject,創建Flash插件代理對象,該Flash插件代理對象包括一系列接口,包括IUnknown指針將會調用的很多標準接口,例如IOleObject、IViewObject 等。然後在調用 IClassFactory 的 CreateInstance 時,將所創建的 Flash 插件代理對象返回給頁面進程的IUnknown指針。在頁面進程激活Flash插件代理對象時,提取出該Flash插件的屬性、URL、大小等相關信息,然後由獨立進程模塊820創建一個獨立進程。在獨立進程調用CoGetClassOb ject,第二創建模塊821攔截該CoGetClassOb ject,創建一個Flash插件活動對象。該Flash插件活動對象包括一系列的接口,包括IUnknown指針將會調用的很多標準接口,例如I01e0bject、IView0bject等。然後在調用IClassFactory的CreateInstance時,將所創建的Flash插件活動對象返回給獨立進程的IUnknown指針。阻止模塊822通過攔截線程消息循環中的定時消息(如0x401消息)或通過對Flash插件活動對象的屬性進行修改,阻止執行Flash插件活動對象實現的功能,即阻止Flash插件播放對應的Flash內容。進一步的,阻止模塊822是根據IUnknown指針查找到記錄Flash插件屬性的函數,調用該函數就可對Flash插件的屬性進行修改。在用戶發起的執行Flash插件實現的功能的請求之後,執行模塊823通過取消攔截線程循環中的定時消息或者通過對Flash插件的屬性進行再修改,繼續執行Flash插件實現的功能,即繼續播放Flash內容。可選的,獨立進程模塊820還可以包括繪製模塊824,適於在獨立進程中攔截活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面。頁面進程模塊810包括顯示模塊812,適於通過代理對象與獨立進程通信調用活動對象,在瀏覽器的指定位置顯示自定義界面。作為另一種可替換的實現方式,頁面進程模塊包括繪製模塊,適於在頁面進程中攔截代理對象與獨立進程通信調用活動對象的動作,調用自定義的繪製函數繪製自定義界面,在瀏覽器的指定位置顯示自定義界面。根據本實施例提供的活動對象創建裝置,在瀏覽器的頁面進程創建Flash插件代理對象,在獨立進程中創建真正的Flash插件,並在真正的Flash插件創建完成後,阻止模塊通過攔截線程消息循環中的定時消息或對Flash插件的屬性進行修改,阻止Flash插件播放Flash內容;在用戶發起播放Flash的請求後,執行模塊通過取消攔截線程消息循環中的定時消息或對Flash插件的屬性進行再修改,使Flash插件繼續播放Flash內容,由此實現了 Flash插件對應的Flash內容的即點即播。與現有技術相比,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求播放Flash內容時,無需刷新頁面,實現了 Flash內容的即點即播。而且,本裝置在阻止Flash插件播放Flash內容時,已經創建了 Flash插件,在用戶再發起播放Flash的請求後,不需要再創建Flash插件,可以直接啟動播放,響應時間較短。進一步的,在本裝置中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的Flash插件與頁面進程分離,從而使Flash插件出現問題時不會影響頁面進程,提高了瀏覽器的穩定性,尤其是當Flash插件出現病毒等安全性問題時,也不會對頁面進程產生影響,提高了瀏覽器的安全性;同時,頁面進程出現問題不會影響Flash插件的正常運行,提高了插件的穩定性。本發明還提供了一種瀏覽器,包括上述實施例五至實施例八中所描述的任一活動對象創建裝置。在此提供的算法和顯示不與任何特定計算機、虛擬系統或者其它設備固有相關。各種通用系統也可以與基於在此的示教一起使用。根據上面的描述,構造這類系統所要求的結構是顯而易見的。此外,本發明也不針對任何特定程式語言。應當明白,可以利用各種程式語言實現在此描述的本發明的內容,並且上面對特定語言所做的描述是為了披露本發明的最佳實施方式。在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,並未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。類似地,應當理解,為了精簡本公開並幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特徵有時被一起分組到單個實施例、圖、或者對其的描述中。然而,並不應將該公開的方法解釋成反映如下意圖即所要求保護的本發明要求比在每個權利要求中所明確記載的特徵更多的特徵。更確切地說,如下面的權利要求書所反映的那樣,發明方面在於少於前面公開的單個實施例的所有特徵。因此,遵循具體實施方式
的權利要求書由此明確地併入該具體實施方式
,其中每個權利要求本身都作為本發明的單獨實施例。本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變並且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特徵和/或過程或者單元中的至少一些是相互排斥之外,可以採用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特徵以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特徵可以由提供相同、等同或相似目的的替代特徵來代替。此外,本領域的技術人員能夠理解,儘管在此所述的一些實施例包括其它實施例中所包括的某些特徵而不是其它特徵,但是不同實施例的特徵的組合意味著處於本發明的範圍之內並且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。本發明的各個部件實施例可以以硬體實現,或者以在一個或者多個處理器上運行的軟體模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數位訊號處理器(DSP)來實現根據本發明實施例的活動對象創建裝置和瀏覽器中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用於執行這裡所描述的方法的一部分或者全部的設備或者裝置程序(例如,電腦程式和電腦程式產品)。這樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從網際網路網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,並且本領域技術人員在不脫離所附權利要求的範圍的情況下可設計出替換實施例。在權利要求中,不應將位於括號之間的任何參考符號構造成對權利要求的限制。單詞「包含」不排除存在未列在權利要求中的元件或步驟。位於元件之前的單詞「一」或「一個」不排除存在多個這樣的元件。本發明可以藉助於包括有若干不同元件的硬體以及藉助於適當編程的計算機來實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬體項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
權利要求
1.一種活動對象創建方法,包括: 在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行修改,阻止執行所述活動對象實現的功能; 根據用戶發起的執行所述活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行再修改,繼續執行所述活動對象實現的功倉泛。
2.根據權利要求1所述的方法,在所述瀏覽器創建活動對象之前還包括:截獲瀏覽器的頁面進程加載活動對象的操作,在瀏覽器的頁面進程創建代理對象替換實際要創建的活動對象,所述代理對象在頁面進程中運行; 所述瀏覽器創建活動對象的過程具體為:在獨立於所述瀏覽器的頁面進程的獨立進程中創建所述活動對象; 所述繼續執行所述活動對象實現的功能的步驟具體為:通過代理對象與獨立進程通信調用活動對象,和/或,代理對象與獨立進程通信被活動對象調用,執行所述活動對象實現的功能。
3.根據權利要求1或2所述的方法,所述定時消息為0x401消息。
4.根據權利要求1或2所述的方法,所述對活動對象的屬性進行修改的步驟包括:獲取所述活動對象的接口指針;根據接口指針查找記錄所述活動對象的屬性的函數,調用該函數對所述活動對象的屬性進行修改。
5.根據權利要求1所述的方法,在所述繼續執行所述活動對象實現的功能的步驟之前包括:攔截所述活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面,在所述瀏覽器的指定位置顯示所述自定義界面。
6.根據權利要求2所述的方法,在所述繼續執行所述活動對象實現的功能的步驟之前包括: 在所述獨立進程中攔截活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面,通過代理對象與獨立進程通信調用活動對象,在所述瀏覽器的指定位置顯示所述自定義界面; 或者,在所述頁面進程中攔截代理對象與獨立進程通信調用活動對象的動作,調用自定義的繪製函數繪製自定義界面,在所述瀏覽器的指定位置顯示所述自定義界面。
7.一種活動對象創建裝置,包括: 阻止模塊,適於在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行修改,阻止執行所述活動對象實現的功能; 執行模塊,適於根據用戶發起的執行所述活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行再修改,繼續執行所述活動對象實現的功能。
8.根據權利要求7所述的裝置,所述裝置包括頁面進程模塊;所述阻止模塊和執行模塊是所述頁面進程模塊的子模塊。
9.根據權利要求7所述的裝置,所述裝置包括頁面進程模塊和獨立進程模塊;所述阻止模塊和執行模塊是所述獨立進程模塊的子模塊; 所述頁面進程模塊包括:第一創建模塊,適於截獲瀏覽器的頁面進程加載活動對象的操作,在瀏覽器的頁面進程創建代理對象替換實際要創建的活動對象,所述代理對象在頁面進程中運行; 所述獨立進程模塊還包括:第二創建模塊,適於在獨立於所述頁面進程的獨立進程中創建所述活動對象; 所述裝置還包括分別在所述頁面進程模塊和所述獨立進程模塊中創建的通信窗口,所述執行模塊進一步適於通過代理對象經由所述通信窗口與獨立進程通信調用活動對象,和/或,代理對象經由所述通信窗口與獨立進程通信被活動對象調用,繼續執行所述活動對象實現的功能。
10.根據權利要求7至9任一項所述的裝置,所述定時消息為0x401消息。
11.根據權利要求7至9任一項所述的裝置,所述阻止模塊具體適於獲取所述活動對象的接口指針;根據接口指針查找記錄所述活動對象的屬性的函數,調用該函數對所述活動對象的屬性進行修改,阻止執行所述活動對象實現的功能。
12.根據權利要求8所述的裝置,還包括:繪製模塊,適於攔截所述活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面,在所述瀏覽器的指定位置顯示所述自定義界面。
13.根據權利要求9所述的裝置, 所述獨立進程模塊還包括:繪製模塊,適於在所述獨立進程中攔截活動對象的繪製函數,調用自定義的繪製函數繪製自定義界面; 所述頁面進程模塊還包括:顯示模塊,適於通過代理對象與獨立進程通信調用活動對象,在所述瀏覽器的指定位置顯示所述自定義界面。
14.根據權利要求9所 述的裝置,所述頁面進程模塊還包括: 繪製模塊,適於在所述頁面進程中攔截代理對象與獨立進程通信調用活動對象的動作,調用自定義的繪製函數繪製自定義界面,在所述瀏覽器的指定位置顯示所述自定義界面。
15.一種包括權利要求7至14任一項所述的活動對象創建裝置的瀏覽器。
全文摘要
本發明公開了一種活動對象創建方法、裝置及瀏覽器。其中根據本發明的一個方面提供的活動對象創建裝置包括阻止模塊,適於在瀏覽器創建活動對象之後,通過攔截線程消息循環中的定時消息或者通過對活動對象的屬性進行修改,阻止執行活動對象實現的功能;執行模塊,適於根據用戶發起的執行所述活動對象實現的功能的請求,通過取消攔截線程消息循環中的定時消息或者通過對所述活動對象的屬性進行再修改,繼續執行所述活動對象實現的功能。採用本發明的技術方案,避免了不必要的插件播放造成用戶資源的浪費,節省了電力、帶寬和系統資源。同時,在用戶有需要重新要求執行活動對象實現的功能時,無需刷新頁面,實現了活動對象實現的功能的即點即執行。
文檔編號G06F9/44GK103077016SQ20121057303
公開日2013年5月1日 申請日期2012年12月25日 優先權日2012年12月25日
發明者李錦偉, 賀躍松, 陳志 , 付俁, 任寰 申請人:北京奇虎科技有限公司, 奇智軟體(北京)有限公司