欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種腳本執(zhí)行方法、系統(tǒng)及瀏覽器的制作方法

文檔序號:6385466閱讀:151來源:國知局
專利名稱:一種腳本執(zhí)行方法、系統(tǒng)及瀏覽器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域,具體涉及一種腳本執(zhí)行方法、系統(tǒng)及瀏覽器。
背景技術(shù)
IPC (Inter-Process Communication,進程間通信)是指至少兩個進程或線程間傳 送數(shù)據(jù)或信號的一些技術(shù)或方法。進程是計算機系統(tǒng)分配資源的最小單位。每個進程都有 自己的一部分獨立的系統(tǒng)資源,彼此是隔離的。為了能使不同的進程互相訪問資源并進行 協(xié)調(diào)工作,才有了進程間通信。不同的進程可以運行在同一計算機上或通過網(wǎng)絡(luò)連接的不 同計算機上。
一般來說,在以下情況下需要實現(xiàn)進程間通信
(I)數(shù)據(jù)傳輸一個進程需要將它的數(shù)據(jù)發(fā)送給另一個進程,發(fā)送的數(shù)據(jù)量在一個 字節(jié)到幾兆字節(jié)之間。
(2)共享數(shù)據(jù)多個進程想要操作共享數(shù)據(jù),一個進程對共享數(shù)據(jù)的修改,別的進 程應(yīng)該立刻看到。
(3)通知事件一個進程需要向另一個或一組進程發(fā)送消息,通知它(它們)發(fā)生了 某種事件(如進程終止時要通知父進程)。
(4)資源共享多個進程之間共享同樣的資源。為了作到這一點,需要內(nèi)核提供鎖 和同步機制。
(5)進程控制有些進程希望完全控制另一個進程的執(zhí)行(如Debug進程),此時控 制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態(tài)改變。
但是,現(xiàn)有技術(shù)還未提供關(guān)于進程間腳本執(zhí)行的方案,利用現(xiàn)有的方法還不能實 現(xiàn)進程間腳本的交互執(zhí)行。發(fā)明內(nèi)容
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上 述問題的腳本執(zhí)行系統(tǒng)、瀏覽器和相應(yīng)的腳本執(zhí)行方法。
根據(jù)本發(fā)明的一個方面,提供了一種腳本執(zhí)行方法,該方法適用于由運行于獨立 進程中的活動對象執(zhí)行運行于頁面進程中代理對象的腳本,所述代理對象和活動對象通過 預(yù)先建立的通信窗口進行通信,所述方法包括所述代理對象通過通信窗口將腳本發(fā)送給 所述活動對象;所述代理對象通過調(diào)用所述活動對象的調(diào)度接口,獲取所述腳本中待執(zhí)行 方法的調(diào)度標(biāo)識;所述代理對象攔截頁面進程中執(zhí)行所述腳本中待執(zhí)行方法的指令,將所 述指令發(fā)送給所述活動對象;所述活動對象通過執(zhí)行所述指令,執(zhí)行所述腳本中待執(zhí)行方 法,而后將執(zhí)行結(jié)果返回給代理對象。
根據(jù)本發(fā)明的另一方面,提供了一種腳本執(zhí)行系統(tǒng),所述系統(tǒng)包括運行于頁面進 程中的代理對象、運行于獨立進程中的活動對象以及分別在所述代理對象和活動對象上創(chuàng) 建的一對通信窗口 ;該系統(tǒng)適用于由活動對象執(zhí)行頁面進程中的腳本,所述活動對象和代理對象通過所述一對通信窗口進行通信;所述代理對象包括發(fā)送模塊,適于通過通信窗 口將腳本發(fā)送給所述活動對象;調(diào)度標(biāo)識獲取模塊,適于通過調(diào)用所述活動對象的調(diào)度接 口,獲取所述腳本中待執(zhí)行方法的調(diào)度標(biāo)識;攔截模塊,適于攔截頁面進程中執(zhí)行所述腳本 中待執(zhí)行方法的指令,將所述指令發(fā)送給所述活動對象;所述活動對象包括接收模塊,適 于接收所述代理對象中的發(fā)送模塊發(fā)送的腳本以及攔截模塊發(fā)送的指令;執(zhí)行模塊,適于 通過執(zhí)行所述指令,執(zhí)行所述腳本中待執(zhí)行方法,而后將執(zhí)行結(jié)果返回給代理對象。
根據(jù)本發(fā)明的再一個方面,提供了一種瀏覽器,包括上述腳本執(zhí)行系統(tǒng)。
根據(jù)本發(fā)明的一個方面提供的方案,在代理對象將腳本發(fā)送給活動對象之后,代 理對象調(diào)用活動對象的調(diào)度接口獲取腳本中待執(zhí)行方法的調(diào)度標(biāo)識;在代理對象將調(diào)度標(biāo) 識反饋給頁面后,代理對象攔截頁面進程執(zhí)行腳本中待執(zhí)行方法的指令,將指令發(fā)送給活 動對象,由活動對象執(zhí)行該指令,并將執(zhí)行指令后獲得的執(zhí)行結(jié)果返回給代理對象,由此實 現(xiàn)了不同進程之間腳本的執(zhí)行,并且實現(xiàn)了運行于頁面進程中的頁面對運行于獨立進程中 的活動對象的控制。
根據(jù)本發(fā)明的一個方面提供的方案,在活動對象將腳本發(fā)送給代理對象之后,代 理對象查詢頁面進程中與腳本執(zhí)行有關(guān)的接口,根據(jù)該接口獲取腳本執(zhí)行的方法,進而根 據(jù)腳本執(zhí)行的方法執(zhí)行活動對象發(fā)送過來的腳本,由此實現(xiàn)了不同進程之間腳本的執(zhí)行, 并且實現(xiàn)了運行于獨立進程中的活動對象對運行于頁面進程中的頁面的控制。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段, 而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠 更明顯易懂,以下特舉本發(fā)明的具體實施方式
。


通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中
圖1示出了本發(fā)明中Flash插件代理對象和Flash插件活動對象的創(chuàng)建過程的示 意圖2示出了根據(jù)本發(fā)明一個實施例的腳本執(zhí)行方法的流程圖3示出了根據(jù)本發(fā)明另一個實施例的腳本執(zhí)行方法的流程圖4示出了根據(jù)本發(fā)明一個實施例的腳本執(zhí)行系統(tǒng)的結(jié)構(gòu)框圖5示出了根據(jù)本發(fā)明另一個實施例的腳本執(zhí)行系統(tǒng)的結(jié)構(gòu)框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開 的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例 所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍 完整的傳達給本領(lǐng)域的技術(shù)人員。
本發(fā)明提供的腳本執(zhí)行方法是指頁面進程與獨立進程之間的腳本執(zhí)行方法。其中 頁面進程運行Web頁面的進程,獨立進程是獨立于頁面進程的另一進程。在頁面有ActiveX插件的情況下,頁面進程運行ActiveX插件代理對象,獨立進程運行ActiveX插件活動對 象,該ActiveX插件活動對象是真正的ActiveX插件的對象。在以下實施例中,以ActiveX 插件為Flash插件為例進行說明,但本發(fā)明不僅限于此。
在介紹頁面進程和獨立進程之間的腳本執(zhí)行方法之前,首先介紹Flash插件代理 對象和Flash插件活動對象的創(chuàng)建過程。圖1示出了本發(fā)明中Flash插件代理對象和Flash 插件活動對象的創(chuàng)建過程的示意圖。如圖1所示,頁面進程中運行有Web頁面和Flash插 件代理對象,獨立進程中運行有空頁面和Flash插件活動對象。
其中,運行于頁面進程中的Flash代理對象是通過攔截瀏覽器的頁面進程創(chuàng)建 Flash活動對象的過程,替換實際要創(chuàng)建的Flash活動對象而創(chuàng)建的。具體來說,在頁面 中有Flash的情況下,當(dāng)瀏覽器創(chuàng)建Flash插件時,會根據(jù)Flash插件CLSID (類標(biāo)識,可 通過CLSIDFromProID獲得)或ProgID (組件的字符串標(biāo)識符)查詢注冊表,查看系統(tǒng)是否 已安裝該Flash插件,若安裝則繼續(xù)創(chuàng)建過程。在頁面進程繼續(xù)創(chuàng)建Flash插件時,攔截 CoGetClassObject,創(chuàng)建Flash插件代理對象,該Flash插件代理對象包括一系列接口,包 括IUnknown指針將會調(diào)用的很多標(biāo)準(zhǔn)接口,例如IOleObject、IViewObject等。然后在調(diào) 用IClassFactory的CreateInstance時,將所創(chuàng)建的Flash插件代理對象返回給頁面進程 的IUnknown指針。由此Flash插件代理對象創(chuàng)建完成。
運行于獨立進程中的Flash插件活動對象是在頁面進程激活Flash插件代理對 象時,在獨立于頁面進程的獨立進程中創(chuàng)建的。具體來說,在頁面進程激活Flash插件代 理對象時,提取出該Flash插件的屬性、URL、大小等相關(guān)信息,然后創(chuàng)建一個獨立進程。首 先,創(chuàng)建一個文件(document),即空頁面,在其中插入一個對象(object),該獨立進程調(diào)用 CoGetClassObject,攔截該 CoGetClassObject,創(chuàng)建一個 Flash 插件活動對象。該 Flash 插件活動對象包括一系列的接口,包括IUnknown指針將會調(diào)用的很多標(biāo)準(zhǔn)接口,例如 IOleObject、IViewObject 等。然后在調(diào)用 IClassFactory 的 CreateInstance 時,將所創(chuàng) 建的Flash插件活動對象返回給獨立進程的IUnknown指針。由此Flash插件活動對象創(chuàng) 建完成。
接著,在Flash插件代理對象和Flash插件活動對象中分別創(chuàng)建與插件對象關(guān)聯(lián) 的通信窗口,用于使Flash插件代理對象和Flash插件活動對象進行通信。通過這兩個通 信窗口,兩個對象可以針對Flash的大小、焦點、刷新、腳本以及其它信息進行交互。
進一步的,如果Web頁面中有嵌套結(jié)構(gòu),即頁面進程運行有多個父頁面和多個子 頁面。每當(dāng)頁面進程創(chuàng)建一個子頁面及其代理對象時,將子頁面的代理對象ID (也可包括 其URL)和該子頁面的父頁面的代理對象ID (也可包括其URL)發(fā)送給獨立進程,在獨立進 程中按照對應(yīng)的層次結(jié)構(gòu)創(chuàng)建活動對象。在這種情況下,運行于頁面進程中的代理對象為 多個,運行于獨立進程中的活動對象為多個,代理對象和活動對象一一對應(yīng),每個代理對象 的通信窗口和與該代理對象對應(yīng)的活動對象的通信窗口具有對應(yīng)的屬性,通過這兩個通信 窗口實現(xiàn)活動對象和與其對應(yīng)的代理對象的通信。
圖2示出了根據(jù)本發(fā)明一個實施例的腳本執(zhí)行方法200的流程圖。該方法適用于 由運行于頁面進程中的Flash插件代理對象執(zhí)行運行于獨立進程中的Flash插件活動對 象的腳本,即該方法是運行于獨立進程中的Flash插件活動對象控制頁面進程中頁面的方 法。如圖2所示,方法200始于步驟S201,其中Flash插件活動對象通過通信窗口將腳本發(fā)送給Flash插件代理對象。以用戶點擊Flash上創(chuàng)建的按鈕,觸發(fā)頁面變黑為例,當(dāng)用戶點 擊Flash上的按鈕時,Flash插件活動對象獲取按鈕點擊操作對應(yīng)的腳本,將該腳本通過通 信窗口發(fā)送給Flash插件代理對象。
隨后,方法200進入步驟S202,其中Flash插件代理對象查詢頁面進程中與腳本執(zhí) 行有關(guān)的接口,根據(jù)該接口獲取腳本執(zhí)行方法。在Flash插件代理對象接收到上述按鈕點 擊操作對應(yīng)的腳本之后,查詢和獲取頁面進程中的IHTMLWindow接口,IHTMLffindow接口為 與腳本執(zhí)行有關(guān)的接口,該IHTMLWindow接口中的ExecScript為用于執(zhí)行腳本的函數(shù),即 ExecScript函數(shù)提供腳本執(zhí)行方法。
隨后,方法200進入步驟S203,其中Flash插件代理對象根據(jù)腳本執(zhí)行方法執(zhí)行該 腳本。Flash插件代理對象根據(jù)ExecScript函數(shù)提供的腳本執(zhí)行方法執(zhí)行上述按鈕點擊操 作對應(yīng)的腳本,使頁面變黑。
根據(jù)本實施例提供的腳本執(zhí)行方法,在活動對象將腳本發(fā)送給代理對象之后,代 理對象查詢頁面進程中與腳本執(zhí)行有關(guān)的接口,根據(jù)該接口獲取腳本執(zhí)行的方法,進而根 據(jù)腳本執(zhí)行的方法執(zhí)行活動對象發(fā)送過來的腳本,由此實現(xiàn)了不同進程之間腳本的執(zhí)行, 并且實現(xiàn)了運行于獨立進程中的活動對象對運行于頁面進程中的頁面的控制。進一步的, 在本方法中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的 ActiveX插件與頁面進程分離,從而使ActiveX插件出現(xiàn)問題時不會影響頁面進程,提高了 瀏覽器的穩(wěn)定性,尤其是當(dāng)ActiveX插件出現(xiàn)病毒等安全性問題時,也不會對頁面進程產(chǎn) 生影響,提高了瀏覽器的安全性;同時,頁面進程出現(xiàn)問題不會影響ActiveX插件的正常運 行,提聞了插件的穩(wěn)定性。
圖3示出了根據(jù)本發(fā)明另一個實施例的腳本執(zhí)行方法300的流程圖。該方法適用 于由運行于獨立進程中的Flash插件活動對象執(zhí)行運行于頁面進程中的Flash插件代理對 象的腳本,即該方法是運行于頁面進程中的頁面控制獨立進程中Flash插件活動對象的方 法。如果頁面想要獲取Flash的信息(如版本號、路徑、URL等屬性)或者頁面想要操作Flash (如頁面想要改變Flash窗口的大小),都可以通過該方法來實現(xiàn)。
如圖3所示,方法300始于步驟S301,F(xiàn)lash插件代理對象通過通信窗口將腳本發(fā) 送給Flash插件活動對象。以獲取Flash版本號為例,由于頁面進程中的Flash插件代理 對象并不是真正的Flash插件,它并不知道Flash版本號,因而Flash插件代理對象不能直 接向頁面反饋Flash版本號。在獨立進程創(chuàng)建完成Flash插件活動對象之后,會向頁面通 知Flash插件活動對象的變量,頁面開發(fā)者根據(jù)該變量在頁面中寫入獲取Flash版本號的 腳本,該腳本中待執(zhí)行的方法就是獲取Flash版本號。Flash插件代理對象通過通信窗口將 獲取Flash版本號的腳本發(fā)送給Flash插件活動對象。
隨后,方法300進入步驟S302,其中Flash插件代理對象通過調(diào)用Flash插件活動 對象的調(diào)度接口,讓Flash插件活動對象執(zhí)行獲取腳本中待執(zhí)行方法的調(diào)度標(biāo)識的方法, 在Flash插件活動對象獲取該調(diào)度標(biāo)識后通過通信窗口將調(diào)度標(biāo)識返回給Flash插件代理 對象。具體來說,首先頁面解析腳本,將該腳本中待執(zhí)行的方法的名稱調(diào)到Flash插件代理 對象的IDispatch接口中,IDispatch接口為調(diào)度接口,用于調(diào)用不支持虛函數(shù)表的語言程 序中的函數(shù),IDispatch接口具有GetIDsOfNames函數(shù)和Invoke函數(shù),其中GetIDsOfNames 函數(shù)提供的是利用方法的名稱返回其調(diào)度ID的方法,Invoke函數(shù)提供的是利用方法的調(diào)度ID執(zhí)行方法的指令。由于Flash插件代理對象無法獲知腳本中待執(zhí)行方法的調(diào)度標(biāo)識 (ID),所以Flash插件代理對象通過通信窗口調(diào)用Flash插件活動對象的IDispatch接口。 而Flash插件活動對象是真正的Flash插件的對象,所以通過調(diào)用Flash插件活動對象的 GetIDsOfNames函數(shù)提供的方法,可以讓Flash插件活動對象獲取待執(zhí)行的方法的調(diào)度ID, 然后Flash插件活動對象通過通信窗口將該調(diào)度ID返回給Flash插件代理對象。
隨后,方法300進入步驟S303,其中Flash插件代理對象攔截頁面進程中執(zhí)行腳 本中待執(zhí)行方法的指令,將該指令發(fā)送給Flash插件活動對象。具體來說,在Flash插件代 理對象獲得待執(zhí)行的方法的調(diào)度ID之后,將該調(diào)度ID反饋給頁面,按照常規(guī)流程頁面進程 下一步就會執(zhí)行Invoke(ID)的指令,本方法在這里攔截頁面進程的Invoke (ID)的指令,將 Invoke (ID)的指令發(fā)送給Flash插件活動對象。
隨后,方法300進入步驟S304,其中Flash插件活動對象通過執(zhí)行指令,執(zhí)行腳本 中待執(zhí)行方法,而后將執(zhí)行結(jié)果返回給Flash插件代理對象。具體來說,F(xiàn)lash插件活動對 象執(zhí)行Invoke (ID)的指令,從而執(zhí)行腳本中待執(zhí)行的方法,獲取Flash版本號,并將Flash 版本號返回給Flash插件代理對象,然后Flash插件代理對象會將Flash版本號反饋給頁面。
根據(jù)本實施例提供的腳本執(zhí)行方法,在代理對象將腳本發(fā)送給活動對象之后,代 理對象調(diào)用活動對象的調(diào)度接口獲取腳本中待執(zhí)行方法的調(diào)度ID ;在代理對象將調(diào)度ID 反饋給頁面后,代理對象攔截頁面進程執(zhí)行腳本中待執(zhí)行方法的指令,將指令發(fā)送給活動 對象,由活動對象執(zhí)行該指令,并將執(zhí)行指令后獲得的執(zhí)行結(jié)果返回給代理對象,由此實現(xiàn) 了不同進程之間腳本的執(zhí)行,并且實現(xiàn)了運行于頁面進程中的頁面對運行于獨立進程中的 活動對象的控制。進一步的,在本方法中,通過在頁面進程中運行代理對象,而在獨立進程 中運行活動對象,使得真正的ActiveX插件與頁面進程分離,從而使ActiveX插件出現(xiàn)問題 時不會影響頁面進程,提高了瀏覽器的穩(wěn)定性,尤其是當(dāng)ActiveX插件出現(xiàn)病毒等安全性 問題時,也不會對頁面進程產(chǎn)生影響,提高了瀏覽器的安全性;同時,頁面進程出現(xiàn)問題不 會影響ActiveX插件的正常運行,提高了插件的穩(wěn)定性。
圖4示出了根據(jù)本發(fā)明一個實施例的腳本執(zhí)行系統(tǒng)的結(jié)構(gòu)框圖。如圖4所示,該系 統(tǒng)包括運行于頁面進程中的代理對象410、運行于獨立進程中的活動對象420以及分別在 代理對象410和活動對象420中創(chuàng)建的一對通信窗口 430。該系統(tǒng)適用于由代理對象410 執(zhí)行活動對象420的腳本,代理對象410和活動對象420通過一對通信窗口 430進行通信。
活動對象420包括發(fā)送模塊421,適于通過通信窗口 430將腳本發(fā)送給代理對象 410。以用戶點擊Flash上創(chuàng)建的按鈕,觸發(fā)頁面變黑為例,當(dāng)用戶點擊Flash上的按鈕時, 活動對象420獲取按鈕點擊操作對應(yīng)的腳本,由發(fā)送模塊421將該腳本通過通信窗口 430 發(fā)送給代理對象410。
代理對象410包括查詢模塊411和執(zhí)行模塊412。查詢模塊411適于查詢頁面 進程中與腳本執(zhí)行有關(guān)的接口,根據(jù)該接口獲取腳本執(zhí)行方法;執(zhí)行模塊412適于根據(jù)腳 本執(zhí)行方法執(zhí)行腳本。在代理對象410接收到上述按鈕點擊操作對應(yīng)的腳本之后,查詢模 塊411查詢和獲取頁面進程中的IHTMLWindow接口,IHTMLWindow接口為與腳本執(zhí)行有關(guān) 的接口,該IHTMLWindow接口中的ExecScript為用于執(zhí)行腳本的函數(shù),即ExecScript函數(shù) 提供腳本執(zhí)行方法。執(zhí)行模塊412根據(jù)ExecScript函數(shù)提供的腳本執(zhí)行方法執(zhí)行上述按鈕點擊操作對應(yīng)的腳本,使頁面變黑。
上述運行于頁面進程中的代理對象410是通過攔截瀏覽器的頁面進程創(chuàng)建活動對象的過程,替換實際要創(chuàng)建的活動對象而創(chuàng)建的;運行于獨立進程中的活動對象420是在頁面進程激活代理對象410時,在獨立于頁面進程的獨立進程中創(chuàng)建的;在活動對象420 和代理對象410中分別創(chuàng)建的一對通信窗口 430用于使活動對象420和代理對象410進行通信。
進一步的,運行于頁面進程中的代理對象為多個,運行于獨立進程中的活動對象為多個,代理對象和活動對象--對應(yīng),代理對象的通信窗口和與代理對象對應(yīng)的活動對象的通信窗口具有對應(yīng)的屬性,通過該一對通信窗口實現(xiàn)活動對象和代理對象的通信。
根據(jù)本實施例提供的腳本執(zhí)行系統(tǒng),在活動對象將腳本發(fā)送給代理對象之后,代理對象查詢頁面進程中與腳本執(zhí)行有關(guān)的接口,根據(jù)該接口獲取腳本執(zhí)行的方法,進而根據(jù)腳本執(zhí)行的方法執(zhí)行活動對象發(fā)送過來的腳本,由此實現(xiàn)了不同進程之間腳本的執(zhí)行, 并且實現(xiàn)了運行于獨立進程中的活動對象對運行于頁面進程中的頁面的控制。進一步的, 在本系統(tǒng)中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的 ActiveX插件與頁面進程分離,從而使ActiveX插件出現(xiàn)問題時不會影響頁面進程,提高了瀏覽器的穩(wěn)定性,尤其是當(dāng)ActiveX插件出現(xiàn)病毒等安全性問題時,也不會對頁面進程產(chǎn)生影響,提高了瀏覽器的安全性;同時,頁面進程出現(xiàn)問題不會影響ActiveX插件的正常運行,提聞了插件的穩(wěn)定性。圖5示出了根據(jù)本發(fā)明另一個實施例的腳本執(zhí)行系統(tǒng)的結(jié)構(gòu)框圖。如圖5所示, 該系統(tǒng)包括運行于頁面進程中的代理對象510、運行于獨立進程中的活動對象520以及分別在代理對象510和活動對象520中創(chuàng)建的一對通信窗口 530。該系統(tǒng)適用于由活動對象 520執(zhí)行頁面進程中的腳本,代理對象510和活動對象520通過一對通信窗口 530進行通 目。
代理對象510包括發(fā)送模塊511、調(diào)度標(biāo)識獲取模塊512以及攔截模塊513。
發(fā)送模塊511適于通過通信窗口將腳本發(fā)送給活動對象520 ;在獨立進程創(chuàng)建完成活動對象520之后,會向頁面通知活動對象520的變量,頁面開發(fā)者根據(jù)該變量在頁面中寫入腳本,發(fā)送模塊511通過通信窗口 530將腳本發(fā)送給活動對象520。
調(diào)度標(biāo)識獲取模塊512適于通過調(diào)用活動對象520的調(diào)度接口,獲取腳本中待執(zhí)行方法的調(diào)度標(biāo)識。進一步的,調(diào)度標(biāo)識獲取模塊512包括調(diào)用模塊514和調(diào)度標(biāo)識接收模塊515,調(diào)用模塊514適于調(diào)用活動對象520的調(diào)度接口,讓活動對象520執(zhí)行獲取腳本中待執(zhí)行方法的調(diào)度標(biāo)識的方法獲取調(diào)度標(biāo)識;調(diào)度標(biāo)識接收模塊515適于接收活動對象520通過通信窗口 530返回的調(diào)度標(biāo)識。具體來說,首先頁面解析腳本,將該腳本中待執(zhí)行的方法的名稱調(diào)到代理對象510的IDispatch接口中,IDispatch接口為調(diào)度接口, 用于調(diào)用不支持虛函數(shù)表的語言程序中的函數(shù),IDispatch接口具有GetIDsOfNames函數(shù)和Invoke函數(shù),其中GetIDsOfNames函數(shù)提供的是利用方法的名稱返回其調(diào)度ID的方法,Invoke函數(shù)提供的是利用方法的調(diào)度ID執(zhí)行方法的指令。由于代理對象510無法獲知腳本中待執(zhí)行方法的調(diào)度ID,所以調(diào)用模塊514通過通信窗口 530調(diào)用活動對象520 的IDispatch接口。而活動對象520是真正的插件的對象,所以通過調(diào)用活動對象520的 GetIDsOfNames函數(shù)提供的方法,可以讓活動對象520獲取待執(zhí)行的方法的調(diào)度ID,然后活動對象520通過通信窗口 530將該調(diào)度ID返回給調(diào)度標(biāo)識接收模塊515。
攔截模塊513適于攔截頁面進程中執(zhí)行腳本中待執(zhí)行方法的指令,將指令發(fā)送給活動對象520。在代理對象510獲得待執(zhí)行的方法的調(diào)度ID之后,將該調(diào)度ID反饋給頁面,按照常規(guī)流程頁面進程下一步就會執(zhí)行Invoke (ID)的指令,在這里攔截模塊513攔截頁面進程的Invoke (ID)的指令,將Invoke (ID)的指令發(fā)送給活動對象520。
活動對象520包括接收模塊521和執(zhí)行模塊522。接收模塊521適于接收代理對象510中的發(fā)送模塊511發(fā)送的腳本以及攔截模塊513發(fā)送的指令;執(zhí)行模塊522適于通過執(zhí)行指令,執(zhí)行腳本中待執(zhí)行方法,而后將執(zhí)行結(jié)果返回給代理對象510。執(zhí)行模塊522執(zhí)行Invoke(ID)的指令,從而執(zhí)行腳本中待執(zhí)行的方法,并將執(zhí)行結(jié)果返回給代理對象510, 然后代理對象510會將執(zhí)行結(jié)果反饋給頁面。
上述運行于頁面進程中的代理對象510是通過攔截瀏覽器的頁面進程創(chuàng)建活動對象的過程,替換實際要創(chuàng)建的活動對象而創(chuàng)建的;運行于獨立進程中的活動對象520是在頁面進程激活代理對象510時,在獨立于頁面進程的獨立進程中創(chuàng)建的;在活動對象520 和代理對象510中分別創(chuàng)建的一對通信窗口 530用于使活動對象520和代理對象510進行通信。
進一步的,運行于頁面進程中的代理對象為多個,運行于獨立進程中的活動對象為多個,代理對象和活動對象--對應(yīng),代理對象的通信窗口和與代理對象對應(yīng)的活動對象的通信窗口具有對應(yīng)的屬性,通過該一對通信窗口實現(xiàn)活動對象和代理對象的通信。
根據(jù)本實施例提供的腳本執(zhí)行系統(tǒng),在代理對象將腳本發(fā)送給活動對象之后,代理對象調(diào)用活動對象的調(diào)度接口獲取腳本中待執(zhí)行方法的調(diào)度ID ;在代理對象將調(diào)度ID 反饋給頁面后,代理對象攔截頁面進程執(zhí)行腳本中待執(zhí)行方法的指令,將指令發(fā)送給活動對象,由活動對象執(zhí)行該指令,并將執(zhí)行指令后獲得的執(zhí)行結(jié)果返回給代理對象,由此實現(xiàn)了不同進程之間腳本的執(zhí)行,并且實現(xiàn)了運行于頁面進程中的頁面對運行于獨立進程中的活動對象的控制。進一步的,在本系統(tǒng)中,通過在頁面進程中運行代理對象,而在獨立進程中運行活動對象,使得真正的ActiveX插件與頁面進程分離,從而使ActiveX插件出現(xiàn)問題時不會影響頁面進程,提高了瀏覽器的穩(wěn)定性,尤其是當(dāng)ActiveX插件出現(xiàn)病毒等安全性問題時,也不會對頁面進程產(chǎn)生影響,提高了瀏覽器的安全性;同時,頁面進程出現(xiàn)問題不會影響ActiveX插件的正常運行,提高了插件的穩(wěn)定性。
本發(fā)明還提供了一種瀏覽器,該瀏覽器可以包括上述實施例所描述的任一腳本執(zhí)行系統(tǒng)。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。 各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中, 并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施 例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖即所要求保 護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面 的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此, 遵循具體實施方式
的權(quán)利要求書由此明確地并入該具體實施方式
,其中每個權(quán)利要求本身 都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地 改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中。可以把實施例中的模塊或單 元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或 子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任 何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的 任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的 權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來 代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例 中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的 范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任 意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行 的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使 用微處理器或者數(shù)字信號處理器(DSP )來實現(xiàn)根據(jù)本發(fā)明實施例的腳本執(zhí)行系統(tǒng)及瀏覽器 中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的 方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣 的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形 式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形 式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng) 域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中, 不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在 未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這 樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來 實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件 項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為 名稱。
權(quán)利要求
1.一種腳本執(zhí)行方法,該方法適用于由運行于獨立進程中的活動對象執(zhí)行運行于頁面進程中代理對象的腳本,所述代理對象和活動對象通過預(yù)先建立的通信窗口進行通信,所述方法包括 所述代理對象通過通信窗口將腳本發(fā)送給所述活動對象; 所述代理對象通過調(diào)用所述活動對象的調(diào)度接口,獲取所述腳本中待執(zhí)行方法的調(diào)度標(biāo)識; 所述代理對象攔截頁面進程中執(zhí)行所述腳本中待執(zhí)行方法的指令,將所述指令發(fā)送給所述活動對象; 所述活動對象通過執(zhí)行所述指令,執(zhí)行所述腳本中待執(zhí)行方法,而后將執(zhí)行結(jié)果返回給代理對象。
2.根據(jù)權(quán)利要求1所述的方法,所述代理對象通過調(diào)用所述活動對象的調(diào)度接口,獲取所述腳本中待執(zhí)行方法的調(diào)度標(biāo)識的步驟包括 所述代理對象通過調(diào)用所述活動對象的調(diào)度接口,讓所述活動對象執(zhí)行獲取所述腳本中待執(zhí)行方法的調(diào)度標(biāo)識的方法,而后所述活動對象通過通信窗口將所述調(diào)度標(biāo)識返回給所述代理對象。
3.根據(jù)權(quán)利要求1或2所述的方法,所述運行于頁面進程中的代理對象是通過攔截瀏覽器的頁面進程創(chuàng)建活動對象的過程,替換實際要創(chuàng)建的活動對象而創(chuàng)建的; 所述運行于獨立進程中的活動對象是在頁面進程激活所述代理對象時,在獨立于瀏覽器頁面進程的獨立進程中創(chuàng)建的; 在所述活動對象和代理對象中分別創(chuàng)建的所述通信窗口用于使活動對象和代理對象進行通信。
4.根據(jù)權(quán)利要求3所述的方法,運行于所述頁面進程中的代理對象為多個,運行于所述獨立進程中的活動對象為多個,所述代理對象和活動對象一一對應(yīng),所述代理對象的通信窗口和與所述代理對象對應(yīng)的活動對象的通信窗口具有對應(yīng)的屬性,通過該兩個通信窗口實現(xiàn)活動對象和代理對象的通信。
5.一種腳本執(zhí)行系統(tǒng),所述系統(tǒng)包括運行于頁面進程中的代理對象、運行于獨立進程中的活動對象以及分別在所述代理對象和活動對象上創(chuàng)建的一對通信窗口 ;該系統(tǒng)適用于由活動對象執(zhí)行頁面進程中的腳本,所述活動對象和代理對象通過所述一對通信窗口進行通信; 所述代理對象包括 發(fā)送模塊,適于通過通信窗口將腳本發(fā)送給所述活動對象; 調(diào)度標(biāo)識獲取模塊,適于通過調(diào)用所述活動對象的調(diào)度接口,獲取所述腳本中待執(zhí)行方法的調(diào)度標(biāo)識; 攔截模塊,適于攔截頁面進程中執(zhí)行所述腳本中待執(zhí)行方法的指令,將所述指令發(fā)送給所述活動對象; 所述活動對象包括 接收模塊,適于接收所述代理對象中的發(fā)送模塊發(fā)送的腳本以及攔截模塊發(fā)送的指令; 執(zhí)行模塊,適于通過執(zhí)行所述指令,執(zhí)行所述腳本中待執(zhí)行方法,而后將執(zhí)行結(jié)果返回給代理對象。
6.根據(jù)權(quán)利要求5所述的系統(tǒng),所述調(diào)度標(biāo)識獲取模塊包括 調(diào)用模塊,適于調(diào)用所述活動對象的調(diào)度接口,讓所述活動對象執(zhí)行獲取所述腳本中待執(zhí)行方法的調(diào)度標(biāo)識的方法獲取所述調(diào)度標(biāo)識; 調(diào)度標(biāo)識接收模塊,適于接收所述活動對象通過通信窗口返回的所述調(diào)度標(biāo)識。
7.根據(jù)權(quán)利要求5或6所述的系統(tǒng),所述運行于頁面進程中的代理對象是通過攔截瀏覽器的頁面進程創(chuàng)建活動對象的過程,替換實際要創(chuàng)建的活動對象而創(chuàng)建的; 所述運行于獨立進程中的活動對象是在頁面進程激活所述代理對象時,在獨立于瀏覽器頁面進程的獨立進程中創(chuàng)建的; 在所述活動對象和代理對象中分別創(chuàng)建的所述一對通信窗口用于使活動對象和代理對象進行通信。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),運行于所述頁面進程中的代理對象為多個,運行于所述獨立進程中的活動對象為多個,所述代理對象和活動對象一一對應(yīng),所述代理對象的通信窗口和與所述代理對象對應(yīng)的活動對象的通信窗口具有對應(yīng)的屬性,通過該一對通信窗口實現(xiàn)活動對象和代理對象的通信。
9.一種包括權(quán)利要求5至8任一項所述的腳本執(zhí)行系統(tǒng)的瀏覽器。
全文摘要
本發(fā)明公開了一種腳本執(zhí)行方法、系統(tǒng)及瀏覽器。其中系統(tǒng)包括運行于頁面進程中的代理對象、運行于獨立進程中的活動對象以及分別在所述代理對象和活動對象上創(chuàng)建的一對通信窗口;該系統(tǒng)適用于由活動對象執(zhí)行頁面進程中的腳本,所述活動對象和代理對象通過所述一對通信窗口進行通信;所述代理對象包括發(fā)送模塊;調(diào)度標(biāo)識獲取模塊;攔截模塊;所述活動對象包括接收模塊,適于接收所述代理對象中的發(fā)送模塊發(fā)送的腳本以及攔截模塊發(fā)送的指令;執(zhí)行模塊,適于通過執(zhí)行所述指令,執(zhí)行所述腳本中待執(zhí)行方法,而后將執(zhí)行結(jié)果返回給代理對象。本發(fā)明實現(xiàn)了不同進程之間腳本的執(zhí)行。
文檔編號G06F9/44GK103034503SQ20121057297
公開日2013年4月10日 申請日期2012年12月25日 優(yōu)先權(quán)日2012年12月25日
發(fā)明者李錦偉, 賀躍松, 陳志 , 付俁, 任寰 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
伽师县| 阿勒泰市| 乐东| 尼木县| 延边| 岚皋县| 加查县| 曲阜市| 林西县| 梅州市| 平遥县| 宁陵县| 梁河县| 海原县| 彩票| 新闻| 石家庄市| 灯塔市| 尤溪县| 阿巴嘎旗| 当阳市| 射阳县| 红河县| 巢湖市| 元谋县| SHOW| 金堂县| 紫云| 蒙阴县| 耿马| 社会| 崇文区| 柯坪县| 新乡县| 佛山市| 龙泉市| 界首市| 资溪县| 尼玛县| 南岸区| 泾源县|