一種擴(kuò)展瀏覽器功能的方法及瀏覽器系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種擴(kuò)展瀏覽器功能的方法及瀏覽器系統(tǒng),其中該方法包括:A.瀏覽器的腳本引擎模塊解析頁面腳本,在解析過程中確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例;B.所述腳本代理模塊根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建Java類實(shí)例,并根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例;C.當(dāng)所述腳本引擎模塊在解析過程中調(diào)用已創(chuàng)建的非原生腳本實(shí)例時(shí),觸發(fā)所述腳本代理模塊調(diào)用與所述已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例。通過上述方式,能夠?qū)崿F(xiàn)一種新的瀏覽器插件機(jī)制,大大增加可用插件數(shù)量。
【專利說明】一種擴(kuò)展瀏覽器功能的方法及瀏覽器系統(tǒng)
【【技術(shù)領(lǐng)域】】
[0001]本發(fā)明涉及瀏覽器插件實(shí)現(xiàn)技術(shù),特別涉及一種擴(kuò)展瀏覽器功能的方法及瀏覽器系統(tǒng)。
【【背景技術(shù)】】
[0002]瀏覽器插件是對(duì)瀏覽器的功能進(jìn)行擴(kuò)展的應(yīng)用?,F(xiàn)有的瀏覽器插件實(shí)現(xiàn)技術(shù)(即對(duì)瀏覽器進(jìn)行功能擴(kuò)展的技術(shù))主要包括以下三類:基于IE平臺(tái)的ActiveX技術(shù)、可以跨瀏覽器平臺(tái)的NPAPI技術(shù)以及在支持JAVA的瀏覽器上實(shí)現(xiàn)的Applet技術(shù)。下面對(duì)這三種瀏覽器插件實(shí)現(xiàn)技術(shù)進(jìn)行相應(yīng)的介紹。
[0003]UActiveX是微軟的WINDOWS平臺(tái)上的專有技術(shù)。它使用C0M(Component ObjectModel,部件對(duì)象模型)技術(shù),使得軟件部件(即組件及組件的主控程序)在網(wǎng)絡(luò)環(huán)境中可以進(jìn)行交互。COM技術(shù)是一種跨應(yīng)用和語言共享二進(jìn)制代碼的方法,定義了不同應(yīng)用在二進(jìn)制級(jí)別上進(jìn)行交互的標(biāo)準(zhǔn),由于ActiveX插件與瀏覽器滿足這樣的標(biāo)準(zhǔn),因此ActiveX插件只要以DLL (Dynamic Link Library,動(dòng)態(tài)鏈接庫)的形式注冊(cè)至注冊(cè)表,就可以供瀏覽器調(diào)用。具體地,瀏覽器加載ActiveX插件的過程請(qǐng)參考圖1和圖2。
[0004]圖1為現(xiàn)有技術(shù)使用ActiveX插件時(shí),網(wǎng)頁源文件的編寫范例示意圖。從圖1中可以看出,要使用ActiveX插件,在HTML文檔中需要使用OBJECT標(biāo)簽進(jìn)行標(biāo)識(shí),在該標(biāo)簽的屬性中,還標(biāo)識(shí)了 ActiveX插件在注冊(cè)表中的⑶ID(Globally Unique Identifier,全球唯一標(biāo)識(shí)符)。圖2為現(xiàn)有技術(shù)的ActiveX插件的加載過程示意圖。如圖2所示,首先在瀏覽器加載HTML頁面時(shí),進(jìn)行DOM (文檔對(duì)象模型)轉(zhuǎn)換,在這個(gè)過程中發(fā)現(xiàn)OBJECT標(biāo)簽,便會(huì)從注冊(cè)表中查找如圖1中的OBJECT標(biāo)簽屬性中指定的⑶ID對(duì)應(yīng)的ActiveX插件,以得到相應(yīng)ActiveX插件的位置,根據(jù)該位置,瀏覽器就可以將對(duì)應(yīng)的ActiveX插件加載到內(nèi)存并運(yùn)行,實(shí)現(xiàn)相應(yīng)的功能。
[0005]2、NPAPI是Netscape公司提出的一種瀏覽器插件技術(shù)。它是類似ActiveX的插件技術(shù),但是它定義了一個(gè)跨瀏覽器的插件開發(fā)標(biāo)準(zhǔn),滿足NPAPI標(biāo)準(zhǔn)的瀏覽器插件能夠在多種瀏覽器(如Firefox、Chrome、Safar1、Opera等)上被調(diào)用。常用的FLASH播放器、支付寶安全控件都是使用NPAPI技術(shù)開發(fā)的插件。
[0006]請(qǐng)參考圖3,圖3為現(xiàn)有技術(shù)的NPAPI插件的加載過程的示意圖。當(dāng)瀏覽器啟動(dòng)時(shí),加載默認(rèn)路徑下的插件類型的文件,并初始化插件環(huán)境(將各插件相應(yīng)地注冊(cè)到瀏覽器中),在初始化中,按照NPAPI的標(biāo)準(zhǔn),插件和瀏覽器會(huì)分別調(diào)用對(duì)方提供的函數(shù)傳遞信息,同時(shí)瀏覽器獲取插件中的信息,以將插件注冊(cè)至瀏覽器中。頁面加載時(shí),在DOM解析的過程中發(fā)現(xiàn)如圖4所示的標(biāo)簽,瀏覽器將判斷注冊(cè)插件中是否存在與圖4所示的MimeType類型一致的插件,如果存在,則創(chuàng)建該插件的實(shí)例,以提供相應(yīng)的功能實(shí)現(xiàn)瀏覽器功能的擴(kuò)展。當(dāng)頁面銷毀時(shí),之前在頁面上創(chuàng)建的插件實(shí)例相應(yīng)也會(huì)被銷毀,當(dāng)瀏覽器關(guān)閉時(shí),將退出插件環(huán)境。
[0007]3、Applet是用Java語言編寫的小應(yīng)用程序作為插件的技術(shù),這些程序直接嵌入到頁面中,由支持Java的瀏覽器解釋執(zhí)行,從而實(shí)現(xiàn)擴(kuò)展瀏覽器功能的目的。
[0008]請(qǐng)參考圖5,圖5為現(xiàn)有技術(shù)使用Applet插件的頁面源文件的示意圖。對(duì)應(yīng)著該頁面,Applet的加載過程如下:瀏覽器加載頁面,在進(jìn)行DOM解析時(shí)發(fā)現(xiàn)Appplet標(biāo)簽,則在Applet標(biāo)簽定義的路徑(X)下根據(jù)類名稱(Y)找到相應(yīng)的applet類,并使用Java虛擬機(jī)對(duì)該類進(jìn)行解釋執(zhí)行,以實(shí)現(xiàn)該Applet的相應(yīng)功能。
[0009]由以上三種現(xiàn)有技術(shù)看,存在的問題是:(I)在ActiveX和NPAPI的方式下,開發(fā)瀏覽器插件均需要滿足特定的通訊標(biāo)準(zhǔn),這使得插件開發(fā)的難度加大,從而影響了可使用的插件數(shù)量;(2)以上三種方法均需要在待加載的頁面源文件中用專門的標(biāo)簽進(jìn)行標(biāo)記,才能實(shí)現(xiàn)相應(yīng)插件的調(diào)用;(3)以上三種方法在加載瀏覽器插件時(shí),都需要為插件指定顯示區(qū)域(可從各方法下對(duì)應(yīng)的源文件標(biāo)簽中的“width ”和“height ”屬性看出);
【
【發(fā)明內(nèi)容】
】
[0010]本發(fā)明所要解決的技術(shù)問題是提供一種擴(kuò)展瀏覽器功能的方法及瀏覽器系統(tǒng),以實(shí)現(xiàn)一種新的瀏覽器插件機(jī)制,以解決現(xiàn)有技術(shù)中插件開發(fā)和使用復(fù)雜,并導(dǎo)致可用的插件數(shù)量少的缺陷。
[0011]本發(fā)明為解決技術(shù)問題而采用的技術(shù)方案是提供一種擴(kuò)展瀏覽器功能的方法,包括:A.瀏覽器的腳本引擎模塊解析頁面腳本,在解析過程中確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例,并將所述待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)發(fā)送給瀏覽器的腳本代理模塊所述腳本代理模塊根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建與所述標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例,并根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例;C.當(dāng)所述腳本引擎模塊在解析過程中調(diào)用已創(chuàng)建的非原生腳 本實(shí)例的方法時(shí),觸發(fā)所述腳本代理模塊調(diào)用與所述已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法并將調(diào)用結(jié)果返回至所述腳本引擎模塊。
[0012]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例的步驟具體包括:判斷所述頁面腳本中的引用所指對(duì)象在內(nèi)存中是否存在,如果否,則確定該引用所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例;或者,通過所述頁面腳本中表征創(chuàng)建動(dòng)作的關(guān)鍵字確定待創(chuàng)建的腳本實(shí)例,并判斷所述待創(chuàng)建的腳本實(shí)例所屬類是否在所述頁面腳本中被定義,如果否,則確定所述待創(chuàng)建的腳本實(shí)例為待創(chuàng)建的非原生腳本實(shí)例。
[0013]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述映射關(guān)系的屬性包括:第一屬性以及第二屬性,其中所述第一屬性用于描述非原生腳本實(shí)例的名稱或非原生腳本實(shí)例所屬類的名稱,所述第二屬性用于描述與所述第一屬性對(duì)應(yīng)的Java類的名稱。
[0014]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述映射關(guān)系的屬性還包括:第三屬性,其中所述第三屬性用于描述依據(jù)該映射關(guān)系產(chǎn)生的對(duì)象的有效期間。
[0015]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述第三屬性的屬性值包括:在一個(gè)頁面加載至銷毀期間有效的頁面屬性值、在一個(gè)瀏覽器加載至關(guān)閉期間有效的會(huì)話屬性值、或與一個(gè)服務(wù)器交互期間有效的域?qū)傩灾怠?br>
[0016]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述腳本代理模塊創(chuàng)建所述Java類實(shí)例的步驟具體包括:所述腳本代理模塊確定各映射關(guān)系中第一屬性的屬性值與所述標(biāo)識(shí)相匹配的映射關(guān)系,并創(chuàng)建由該映射關(guān)系中第二屬性的屬性值指定的Java類的實(shí)例。[0017]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述標(biāo)識(shí)包括所述待創(chuàng)建的非原生腳本實(shí)例的名稱,或者,所述待創(chuàng)建的非原生腳本實(shí)例所屬類的名稱。
[0018]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例的步驟具體包括:根據(jù)所述Java類實(shí)例的屬性和方法確定所述待創(chuàng)建的非原生腳本實(shí)例的定義,并根據(jù)該定義創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例。
[0019]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述方法在所述步驟A前進(jìn)一步包括:所述腳本代理模塊確定所述插件描述文件中第三屬性值為會(huì)話屬性值的映射關(guān)系,并創(chuàng)建該映射關(guān)系指定的Java類實(shí)例及與該Java類實(shí)例對(duì)應(yīng)的非原生腳本實(shí)例。
[0020]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述相應(yīng)方法為與調(diào)用的非原生腳本實(shí)例的方法具有相同名稱的方法。
[0021]本發(fā)明還提供了一種瀏覽器系統(tǒng),包括腳本引擎模塊和腳本代理模塊,其特征在于,所述腳本引擎模塊包括:解析單元,用于解析頁面腳本;檢測(cè)單元,用于在所述解析單元解析過程中確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例,并將所述待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)發(fā)送給瀏覽器的腳本代理模塊;所述腳本代理模塊包括:執(zhí)行單元、第一創(chuàng)建單元和第二創(chuàng)建單元;所述第一創(chuàng)建單元,用于根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建與所述標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例;所述第二創(chuàng)建單元,用于根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例;所述解析單元還用于在解析過程中調(diào)用已創(chuàng)建的非原生腳本實(shí)例的方法時(shí),觸發(fā)所述執(zhí)行單元運(yùn)行,其中所述執(zhí)行單元用于調(diào)用與所述已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法并將調(diào)用結(jié)果返回至所述解析單元。
[0022]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述檢測(cè)單元確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例的方式具體包括:所述檢測(cè)單元判斷所述頁面腳本中的引用所指對(duì)象在內(nèi)存中是否存在,如果否,則確定該引用所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例;或者,所述檢測(cè)單元通過所述頁面腳本中表征創(chuàng)建動(dòng)作的關(guān)鍵字確定待創(chuàng)建的腳本實(shí)例,并判斷所述待創(chuàng)建的腳本實(shí)例所屬類是否在所述頁面腳本中被定義,如果否,則確定所述待創(chuàng)建的腳本實(shí)例為待創(chuàng)建的非原生腳本實(shí)例。
[0023]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述映射關(guān)系的屬性包括:第一屬性以及第二屬性,其中所述第一屬性用于描述非原生腳本實(shí)例的名稱或非原生腳本實(shí)例所屬類的名稱,所述第二屬性用于描述與所述第一屬性對(duì)應(yīng)的Java類的名稱。
[0024]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述映射關(guān)系的屬性還包括:第三屬性,其中所述第三屬性用于描述依據(jù)該映射關(guān)系產(chǎn)生的對(duì)象的有效期間。
[0025]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述第三屬性的屬性值包括:在一個(gè)頁面加載至銷毀期間有效的頁面屬性值、在一個(gè)瀏覽器加載至關(guān)閉期間有效的會(huì)話屬性值、或與一個(gè)服務(wù)器交互期間有效的域?qū)傩灾怠?br>
[0026]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述第一創(chuàng)建單元?jiǎng)?chuàng)建所述Java類實(shí)例的方式具體包括:所述第一創(chuàng)建單元確定各映射關(guān)系中第一屬性的屬性值與所述標(biāo)識(shí)相匹配的映射關(guān)系,并創(chuàng)建由該映射關(guān)系中第二屬性的屬性值指定的Java類的實(shí)例。
[0027]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述標(biāo)識(shí)包括所述待創(chuàng)建的非原生腳本實(shí)例的名稱,或者,所述待創(chuàng)建的非原生腳本實(shí)例所屬類的名稱。
[0028]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述第二創(chuàng)建單元?jiǎng)?chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例的方式具體包括:所述第二創(chuàng)建單元根據(jù)所述Java類實(shí)例的屬性和方法確定所述待創(chuàng)建的非原生腳本實(shí)例的定義,并根據(jù)該定義創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例。[0029]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述腳本代理模塊進(jìn)一步包括:預(yù)加載單元,用于在所述解析單元解析頁面腳本前,確定所述插件描述文件中第三屬性值為會(huì)話屬性值的映射關(guān)系,并創(chuàng)建該映射關(guān)系指定的Java類實(shí)例及與該Java類實(shí)例對(duì)應(yīng)的非原生腳本實(shí)例。
[0030]根據(jù)本發(fā)明之一優(yōu)選實(shí)施例,所述相應(yīng)方法為與調(diào)用的非原生腳本實(shí)例的方法具有相同名稱的方法。
[0031]由以上技術(shù)方案可以看出,通過本發(fā)明方法,可以取得以下技術(shù)效果:(1)可以建立起腳本空間至Java空間的通訊機(jī)制,不需要再專門開發(fā)滿足某種通訊協(xié)議的插件來進(jìn)行瀏覽器擴(kuò)展,而是可以利用現(xiàn)有的已實(shí)現(xiàn)各種功能的Java類,來擴(kuò)展瀏覽器的功能,從而使得大量已存在的Java類可以作為瀏覽器插件使用,大大增加了可使用的插件數(shù)量。(2)與現(xiàn)有技術(shù)相比,本發(fā)明既不需要在頁面的源文件中用專門的標(biāo)簽進(jìn)行標(biāo)注,也不需要為插件指定顯示區(qū)域,從而讓插件的使用變得更加靈活。
【【專利附圖】
【附圖說明】】
[0032]圖1為現(xiàn)有技術(shù)使用ActiveX插件時(shí),網(wǎng)頁源文件的編與范例不意圖;
[0033]圖2為現(xiàn)有技術(shù)的ActiveX插件的加載過程示意圖;
[0034]圖3為現(xiàn)有技術(shù)的NPAPI插件的加載過程示意圖;
[0035]圖4為現(xiàn)有技術(shù)使用NPAPI插件時(shí),網(wǎng)頁源文件的編與范例不意圖;
[0036]圖5為現(xiàn)有技術(shù)使用Applet插件的頁面源文件的示意圖;
[0037]圖6為本發(fā)明擴(kuò)展瀏覽器功能的方法的實(shí)施例的流程示意圖;
[0038]圖7為本發(fā)明中瀏覽器系統(tǒng)的實(shí)施例的結(jié)構(gòu)示意框圖。
【【具體實(shí)施方式】】
[0039]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。
[0040]本說明書中的腳本舉例中均采用JavaScript腳本進(jìn)行,但是應(yīng)該理解,本發(fā)明方法中的腳本不應(yīng)僅限于此。
[0041]在本發(fā)明中,瀏覽器包括了腳本引擎模塊和腳本代理模塊。其中腳本引擎模塊,用于與腳本交互,并根據(jù)交互情況,完成與腳本代理模塊之間的通訊。腳本代理模塊,用于根據(jù)腳本引擎?zhèn)鬟f的信息,執(zhí)行相關(guān)動(dòng)作。下面將通過具體實(shí)施例對(duì)上述過程進(jìn)行介紹。
[0042]請(qǐng)參考圖6,圖6為本發(fā)明擴(kuò)展瀏覽器功能的方法的實(shí)施例的流程示意圖,如圖6所示,本發(fā)明的方法主要包括以下步驟:
[0043]S1、瀏覽器的腳本引擎模塊解析頁面腳本,在解析過程中確定頁面腳本中待創(chuàng)建的非原生腳本實(shí)例,并將待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)發(fā)送給瀏覽器的腳本代理模塊。
[0044]S2、腳本代理模塊根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建與上述標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例,并根據(jù)該Java類實(shí)例創(chuàng)建上述待創(chuàng)建的非原生腳本實(shí)例。
[0045]S3、當(dāng)腳本引擎模塊在解析過程中調(diào)用已創(chuàng)建的非原生腳本實(shí)例的方法時(shí),觸發(fā)腳本代理模塊調(diào)用與已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法并將調(diào)用結(jié)果返回至腳本引擎模塊。
[0046]下面對(duì)上述步驟進(jìn)行具體說明。
[0047]步驟SI中,瀏覽器在加載一個(gè)頁面時(shí),腳本引擎模塊對(duì)該頁面中的腳本進(jìn)行解析,在解析過程中確定頁面中待創(chuàng)建的非原生腳本實(shí)例。非原生腳本實(shí)例指的是僅通過頁面腳本中的定義,無法創(chuàng)建的腳本實(shí)例。具體地,確定待創(chuàng)建的非原生腳本實(shí)例的步驟包括:
[0048]判斷頁面腳本中的引用所指對(duì)象在內(nèi)存中是否存在,如果該引用所指對(duì)象在內(nèi)存中不存在,則確定該引用所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例。
[0049]請(qǐng)參考代碼塊1:
[0050]〈script language = ^Javascript 丨丨 >
[0051]alert (ExtCalendar.now ()) ;(I)
[0052]</script)
[0053]假設(shè)代碼塊I中引用“ExtCalendar”所指對(duì)象在內(nèi)存中不存在,則認(rèn)為“ExtCalendar”所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例。
[0054]此外,確定頁面腳本中待創(chuàng)建的非原生腳本實(shí)例的實(shí)施方式還包括:通過頁面腳本中表征創(chuàng)建動(dòng)作的關(guān)鍵字確定待創(chuàng)建的腳本實(shí)例,并判斷待創(chuàng)建的腳本實(shí)例所屬類是否在頁面腳本中被定義,如果否,則確定待創(chuàng)建的腳本實(shí)例為待創(chuàng)建的非原生腳本實(shí)例。
[0055]請(qǐng)參考代碼塊2:
[0056]
<script language='Javasaipf' >
var mailer = new Ma1.ler();
var content = ”這是一封電子郵件的正文部分”;(2)
mailer.send("test@test.com","標(biāo)題”,content);
</script〉
[0057]代碼塊2中通過“new”關(guān)鍵字(即表征創(chuàng)建動(dòng)作的關(guān)鍵字)欲創(chuàng)建腳本實(shí)例“mailer”,如果其所屬類Mailer在頁面腳本中均無定義,則認(rèn)為“mailer”為待創(chuàng)建的非原生腳本實(shí)例。
[0058]步驟SI中,腳本引擎模塊在確定待創(chuàng)建的非原生腳本實(shí)例后,將該待創(chuàng)建的非原生腳本實(shí)例標(biāo)識(shí)發(fā)送至腳本代理模塊,這樣在步驟S2中,腳本代理模塊就能根據(jù)該標(biāo)識(shí)找到相應(yīng)的映射關(guān)系,從而根據(jù)相應(yīng)的映射關(guān)系創(chuàng)建對(duì)應(yīng)的Java類實(shí)例和非原生腳本實(shí)例。
[0059]具體地,步驟S2中,腳本代理模塊讀取插件描述文件,以步驟SI中發(fā)送過來的非原生腳本實(shí)例的標(biāo)識(shí)作為關(guān)鍵字,在插件描述文件中查找匹配的映射關(guān)系。
[0060]根據(jù)前面所列舉的代碼塊I和代碼塊2中的內(nèi)容可以理解,步驟SI中發(fā)送的非原生腳本實(shí)例的標(biāo)識(shí),既可以是該非原生腳本實(shí)例的名稱(如代碼塊I中的“ExtCalendar”),也可以是該非原生腳本實(shí)例所屬類的名稱(如代碼塊2中的“Mailer”)。與之對(duì)應(yīng)的,插件描述文件中的一個(gè)映射關(guān)系的屬性,包括了第一屬性和第二屬性,其中第一屬性用于描述非原生腳本實(shí)例的名稱或非原生腳本實(shí)例所屬類的名稱,第二屬性用于描述與第一屬性對(duì)應(yīng)的Java類的名稱。
[0061]請(qǐng)參考代碼塊3,代碼塊3為插件描述文件中的映射關(guān)系的示意代碼:
[0062]
<plugin>
〈class Iiame=i1Maiier" java_ciass="com.plugin.mailer" lifecycle="page"> i 3 )〈instance name="ExtCalendar" java_class="com.plugin.extcalendar"
I i fee y c I e=" sess i on" >
</pliigin>
[0063]上述代碼第二行的映射關(guān)系中的第一屬性描述了非原生腳本實(shí)例所屬類的名稱(class name),第二屬性描述了對(duì)應(yīng)的Java類的名稱(java class);第三四行的映射關(guān)系中的第一屬性描述了非原生腳本實(shí)例的名稱(instance name),第二屬性描述了對(duì)應(yīng)的Java類的名稱。
[0064]步驟S2中,腳本代理模塊創(chuàng)建與待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例的步驟具體包括:
[0065]確定各映射關(guān)系中第一屬性的屬性值與待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)相匹配的映射關(guān)系,并創(chuàng)建由該映射關(guān)系中第二屬性的屬性值指定的Java類的實(shí)例。
[0066]由于待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)既可以是該實(shí)例的名稱也可以是該實(shí)例所屬類的名稱,步驟S2中在確定匹配的映射關(guān)系時(shí),只需要利用步驟SI發(fā)送過來的標(biāo)識(shí)在各映射關(guān)系的第一屬性值中進(jìn)行匹配查找即可。
[0067]例如步驟SI中發(fā)送過來的非原生腳本實(shí)例的標(biāo)識(shí)為“Mailer”,在代碼塊3的第二行映射關(guān)系中第一屬性的屬性值“Mailer”與之匹配,則通過這行映射關(guān)系,可以確定對(duì)應(yīng)的Java類為“com.plugin, mailer”,利用該類的類文件,就可以創(chuàng)建相應(yīng)的Java類實(shí)例。上述的類文件,可以存放在默認(rèn)路徑下,也可以在映射關(guān)系中添加一個(gè)新的屬性用于表征Java類文件的存放位置(代碼塊3中未示出),如果映射關(guān)系中包含這樣的一個(gè)屬性,則在創(chuàng)建相應(yīng)的Java類時(shí),到該屬性值指定的位置去獲取類文件以創(chuàng)建相應(yīng)的Java類實(shí)例。
[0068]在創(chuàng)建了 Java類實(shí)例后,步驟S2中腳本代理模塊會(huì)將該Java類實(shí)例包裝為非原生腳本實(shí)例,也就是根據(jù)該Java類實(shí)例創(chuàng)建前面步驟SI中確定的待創(chuàng)建的非原生腳本實(shí)例。通過這個(gè)步驟,Java空間與腳本空間就建立了交互機(jī)制,從而能夠在后續(xù)步驟中實(shí)現(xiàn)從腳本空間的調(diào)用到Java空間調(diào)用。具體地,根據(jù)Java類實(shí)例創(chuàng)建步驟SI中確定的待創(chuàng)建的非原生腳本實(shí)例的步驟包括:根據(jù)該Java類實(shí)例的屬性和方法確定待創(chuàng)建的非原生腳本實(shí)例的定義,并根據(jù)該定義創(chuàng)建該非原生腳本實(shí)例。在待創(chuàng)建的非原生腳本實(shí)例的定義中,確定了該非原生腳本實(shí)例具有與對(duì)應(yīng)的已創(chuàng)建的Java類實(shí)例相同的屬性和方法,這樣,后續(xù)步驟中在腳本空間的調(diào)用就能正確映射到Java空間的調(diào)用上來。這里描述的相同屬性和方法,是實(shí)質(zhì)上相同而不僅限于名字相同,例如,如果插件描述文件中對(duì)Java類實(shí)例的方法和非原生腳本實(shí)例的方法的對(duì)應(yīng)關(guān)系進(jìn)行了描述,則應(yīng)按照這種描述來確定相同方法。例如已創(chuàng)建的Java類實(shí)例A擁有一個(gè)“read”方法,假設(shè)映射關(guān)系中有下列兩個(gè)屬性:<......java_m=read, instance_m=readme......>
[0069]那么則應(yīng)該理解,待創(chuàng)建的非原生腳本實(shí)例與已創(chuàng)建的A的相同方法的方法名應(yīng)該為readme,而不是read。
[0070]作為一種優(yōu)選的實(shí)施方式,本發(fā)明不描述Java實(shí)例和非原生腳本實(shí)例的方法和屬性之間的對(duì)應(yīng)關(guān)系,而是默認(rèn)兩者之間以相同的名稱進(jìn)行映射。
[0071]根據(jù)上述描述,應(yīng)該理解,在步驟S3中描述的“調(diào)用與已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法”,其中的相應(yīng)方法,在插件描述文件中存在Java類實(shí)例與非原生腳本實(shí)例的方法之間的對(duì)應(yīng)關(guān)系描述時(shí),可以是該對(duì)應(yīng)關(guān)系中確定的方法。作為優(yōu)選的實(shí)施方式,由于插件描述文件中不對(duì)Java類實(shí)例和非原生腳本實(shí)例的方法之間的對(duì)應(yīng)關(guān)系進(jìn)行描述,所以相應(yīng)方法就是Java類實(shí)例的、與調(diào)用的非原生腳本實(shí)例的方法具有相同名稱的方法。例如腳本引擎模塊調(diào)用的非原生腳本實(shí)例的方法為“now”方法,則觸發(fā)腳本代理模塊調(diào)用對(duì)應(yīng)Java類實(shí)例的“now”方法。
[0072]步驟S3中,由于Java的反射機(jī)制使得運(yùn)行時(shí)任意調(diào)用一個(gè)Java類實(shí)例的方法成為可能,因此在本領(lǐng)域技術(shù)人員可以理解的范圍內(nèi),上述調(diào)用機(jī)制不難實(shí)現(xiàn),本說明書對(duì)此不做贅述。
[0073]從代碼塊3中還可以看出,映射關(guān)系的屬性中還可以包括第三屬性(lifecycle),其中該屬性用于描述依據(jù)該映射關(guān)系產(chǎn)生的對(duì)象的有效期間。第三屬性的屬性值可以是在一個(gè)頁面加載至銷毀期間有效的頁面屬性值、在一個(gè)瀏覽器加載至關(guān)閉期間有效的會(huì)話屬性值、或與一個(gè)服務(wù)器交互期間有效的域?qū)傩灾?。在代碼塊3第二行的映射關(guān)系中,第三屬性值“page”表示的就是頁面屬性值,第三四行的映射關(guān)系中,第三屬性值“session”表示的就是會(huì)話屬性值。
[0074]在第三屬性定義的有效期間內(nèi),根據(jù)對(duì)應(yīng)映射關(guān)系產(chǎn)生的Java類實(shí)例和非原生腳本實(shí)例會(huì)一直存在,例如會(huì)話屬性值的對(duì)象(Java類實(shí)例和非原生腳本實(shí)例),一旦創(chuàng)建,則在瀏覽器關(guān)閉前均有效,直到瀏覽器關(guān)閉才被銷毀,而頁面屬性值的對(duì)象,在當(dāng)前頁面被關(guān)閉時(shí)就會(huì)被銷毀。
[0075]由于會(huì)話屬性值的對(duì)象與頁面的生命周期無關(guān),可以在頁面加載前即先創(chuàng)建,以在頁面加載時(shí)直接調(diào)用,因此,本發(fā)明還可以在步驟SI前進(jìn)一步包括:
[0076]腳本代理模塊確定插件描述文件中第三屬性值為會(huì)話屬性值的映射關(guān)系,并創(chuàng)建該映射關(guān)系指定的Java類實(shí)例及與該Java類實(shí)例對(duì)應(yīng)的非原生腳本實(shí)例。
[0077]請(qǐng)參考圖7,圖7為本發(fā)明中的瀏覽器系統(tǒng)的實(shí)施例的結(jié)構(gòu)示意框圖。如圖7所示,該系統(tǒng)包括:腳本引擎模塊和腳本代理模塊,其中,腳本引擎模塊包括:解析單元201和檢測(cè)單元202,腳本代理模塊包括:第一創(chuàng)建單元301、第二創(chuàng)建單元302及執(zhí)行單元303。
[0078]解析單元201,用于解析頁面腳本。檢測(cè)單元202,用于在解析單元201解析過程中,確定頁面腳本中待創(chuàng)建的非原生腳本實(shí)例,并將待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)發(fā)送給瀏覽器的腳本代理模塊。
[0079]具體地,檢測(cè)單元202確定頁面腳本中待創(chuàng)建的非原生腳本實(shí)例的方式包括:判斷頁面腳本中引用所指對(duì)象在內(nèi)存中是否存在,如果否,則確定該引用所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例;或者,通過頁面腳本中表征創(chuàng)建動(dòng)作的關(guān)鍵字確定待創(chuàng)建的腳本實(shí)例,并判斷該腳本實(shí)例所屬類是否在頁面腳本中被定義,如果否,則確定該待創(chuàng)建的腳本實(shí)例為待創(chuàng)建的非原生腳本實(shí)例。
[0080]第一創(chuàng)建單元301,用于根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建與待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例。第二創(chuàng)建單元302,用于根據(jù)已創(chuàng)建的Java類實(shí)例創(chuàng)建檢測(cè)單元202確定的待創(chuàng)建的非原生腳本實(shí)例。
[0081]上述映射關(guān)系的屬性包括:第一屬性以及第二屬性,其中第一屬性用于描述非原生腳本實(shí)例的名稱或非原生腳本實(shí)例所屬類的名稱,第二屬性用于描述與第一屬性對(duì)應(yīng)的Java類的名稱。
[0082]具體地,第一創(chuàng)建單元301創(chuàng)建對(duì)應(yīng)的Java類實(shí)例的方式包括:確定各映射關(guān)系中第一屬性的屬性值與待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)相匹配的映射關(guān)系,并創(chuàng)建由該映射關(guān)系中第二屬性的屬性值指定的Java類的實(shí)例。第二創(chuàng)建單元302創(chuàng)建待創(chuàng)建的非原生腳本實(shí)例的方式包括:根據(jù)已創(chuàng)建的Java類實(shí)例的屬性和方法確定待創(chuàng)建的非原生腳本實(shí)例的定義,并根據(jù)該定義創(chuàng)建該非原生腳本實(shí)例。
[0083]解析單元201,還用于在解析過程中調(diào)用已創(chuàng)建的非原生腳本實(shí)例的方法時(shí),觸發(fā)執(zhí)行單元303運(yùn)行,執(zhí)行單元303,用于調(diào)用與上述已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法并將調(diào)用結(jié)果返回至解析單元201。其中相應(yīng)方法,在一種實(shí)施例中就是與解析單元201調(diào)用的非原生腳本實(shí)例的方法具有相同名稱的方法。
[0084]此外,映射關(guān)系還可以包括第三屬性,其中第三屬性用于描述依據(jù)該映射關(guān)系產(chǎn)生的對(duì)象的有效期間。所述第三屬性的屬性值包括:在一個(gè)頁面加載至銷毀期間有效的頁面屬性值、在一個(gè)瀏覽器加載至關(guān)閉期間有效的會(huì)話屬性值、或與一個(gè)服務(wù)器交互期間有效的域?qū)傩灾怠?br>
[0085]與之對(duì)應(yīng)的,本發(fā)明的瀏覽器系統(tǒng)中的腳本代理模塊進(jìn)一步還可包括一預(yù)加載單元(圖7中未示出),用于在解析單元201解析頁面腳本前,確定插件描述文件中第三屬性值為會(huì)話屬性值的映射關(guān)系,并創(chuàng)建該映射關(guān)系指定的Java類實(shí)例及與該Java類實(shí)例對(duì)應(yīng)的非原生腳本實(shí)例。
[0086]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種擴(kuò)展瀏覽器功能的方法,包括: A.瀏覽器的腳本引擎模塊解析頁面腳本,在解析過程中確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例,并將所述待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)發(fā)送給瀏覽器的腳本代理模塊; B.所述腳本代理模塊根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建與所述標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例,并根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例; C.當(dāng)所述腳本引擎模塊在解析過程中調(diào)用已創(chuàng)建的非原生腳本實(shí)例的方法時(shí),觸發(fā)所述腳本代理模塊調(diào)用與所述已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法并將調(diào)用結(jié)果返回至所述腳本引擎模塊。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例的步驟具體包括: 判斷所述頁面腳本中的引用所指對(duì)象在內(nèi)存中是否存在,如果否,則確定該引用所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例;或者, 通過所述頁面腳本中表征創(chuàng)建動(dòng)作的關(guān)鍵字確定待創(chuàng)建的腳本實(shí)例,并判斷所述待創(chuàng)建的腳本實(shí)例所屬類是否在所述頁面腳本中被定義,如果否,則確定所述待創(chuàng)建的腳本實(shí)例為待創(chuàng)建的非原生腳本實(shí)例。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述映射關(guān)系的屬性包括:第一屬性以及第二屬性,其中所述第一屬性用于描述非原生腳本實(shí)例的名稱或非原生腳本實(shí)例所屬類的名稱,所述第二屬性用于描述與所述第一屬性對(duì)應(yīng)的Java類的名稱。
4.根據(jù)權(quán)利要求3所述的方法 ,其特征在于,所述映射關(guān)系的屬性還包括:第三屬性,其中所述第三屬性用于描述依據(jù)該映射關(guān)系產(chǎn)生的對(duì)象的有效期間。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述第三屬性的屬性值包括:在一個(gè)頁面加載至銷毀期間有效的頁面屬性值、在一個(gè)瀏覽器加載至關(guān)閉期間有效的會(huì)話屬性值、或與一個(gè)服務(wù)器交互期間有效的域?qū)傩灾怠?br>
6.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述腳本代理模塊創(chuàng)建所述Java類實(shí)例的步驟具體包括: 所述腳本代理模塊確定各映射關(guān)系中第一屬性的屬性值與所述標(biāo)識(shí)相匹配的映射關(guān)系,并創(chuàng)建由該映射關(guān)系中第二屬性的屬性值指定的Java類的實(shí)例。
7.根據(jù)權(quán)利要求1或6所述的方法,所述標(biāo)識(shí)包括所述待創(chuàng)建的非原生腳本實(shí)例的名稱,或者,所述待創(chuàng)建的非原生腳本實(shí)例所屬類的名稱。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例的步驟具體包括: 根據(jù)所述Java類實(shí)例的屬性和方法確定所述待創(chuàng)建的非原生腳本實(shí)例的定義,并根據(jù)該定義創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述方法在所述步驟A前進(jìn)一步包括: 所述腳本代理模塊確定所述插件描述文件中第三屬性值為會(huì)話屬性值的映射關(guān)系,并創(chuàng)建該映射關(guān)系指定的Java類實(shí)例及與該Java類實(shí)例對(duì)應(yīng)的非原生腳本實(shí)例。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述相應(yīng)方法為與調(diào)用的非原生腳本實(shí)例的方法具有相同名稱的方法。
11.一種瀏覽器系統(tǒng),包括腳本引擎模塊和腳本代理模塊,其特征在于,所述腳本引擎模塊包括: 解析單元,用于解析頁面腳本; 檢測(cè)單元,用于在所述解析單元解析過程中確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例,并將所述待創(chuàng)建的非原生腳本實(shí)例的標(biāo)識(shí)發(fā)送給瀏覽器的腳本代理模塊; 所述腳本代理模塊包括:執(zhí)行單元、第一創(chuàng)建單元和第二創(chuàng)建單元; 所述第一創(chuàng)建單元,用于根據(jù)預(yù)設(shè)的插件描述文件中的映射關(guān)系創(chuàng)建與所述標(biāo)識(shí)對(duì)應(yīng)的Java類實(shí)例; 所述第二創(chuàng)建單元,用于根據(jù)所述Java類實(shí)例創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例; 所述解析單元還用于在解析過程中調(diào)用已創(chuàng)建的非原生腳本實(shí)例的方法時(shí),觸發(fā)所述執(zhí)行單元運(yùn)行,其中所述執(zhí)行單元用于調(diào)用與所述已創(chuàng)建的非原生腳本實(shí)例對(duì)應(yīng)的Java類實(shí)例的相應(yīng)方法并將調(diào)用結(jié)果返回至所述解析單元。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述檢測(cè)單元確定所述頁面腳本中待創(chuàng)建的非原生腳本實(shí)例的方式具體包括: 所述檢測(cè)單元判斷所述頁面腳本中的引用所指對(duì)象在內(nèi)存中是否存在,如果否,則確定該引用所指對(duì)象為待創(chuàng)建的非原生腳本實(shí)例;或者, 所述檢測(cè)單元通過所述頁面腳本中表征創(chuàng)建動(dòng)作的關(guān)鍵字確定待創(chuàng)建的腳本實(shí)例,并判斷所述待創(chuàng)建的腳本實(shí)例所屬類是否在所述頁面腳本中被定義,如果否,則確定所述待創(chuàng)建的腳本實(shí)例為待創(chuàng)建的非原生腳本實(shí)例。
13.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述映射關(guān)系的屬性包括:第一屬性以及第二屬性,其中所述第一屬性用于描述非原生腳本實(shí)例的名稱或非原生腳本實(shí)例所屬類的名稱,所述第二屬性用于描述與所述第一屬性對(duì)應(yīng)的Java類的名稱。
14.根據(jù)權(quán)利要求13所述的系統(tǒng),其特征在于,所述映射關(guān)系的屬性還包括:第三屬性,其中所述第三屬性用于描述依據(jù)該映射關(guān)系產(chǎn)生的對(duì)象的有效期間。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其特征在于,所述第三屬性的屬性值包括:在一個(gè)頁面加載至銷毀期間有效的頁面屬性值、在一個(gè)瀏覽器加載至關(guān)閉期間有效的會(huì)話屬性值、或與一個(gè)服務(wù)器交互期間有效的域?qū)傩灾怠?br>
16.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述第一創(chuàng)建單元?jiǎng)?chuàng)建所述Java類實(shí)例的方式具體包括: 所述第一創(chuàng)建單元確定各映射關(guān)系中第一屬性的屬性值與所述標(biāo)識(shí)相匹配的映射關(guān)系,并創(chuàng)建由該映射關(guān)系中第二屬性的屬性值指定的Java類的實(shí)例。
17.根據(jù)權(quán)利要求11或16所述的系統(tǒng),其特征在于,所述標(biāo)識(shí)包括所述待創(chuàng)建的非原生腳本實(shí)例的名稱,或者,所述待創(chuàng)建的非原生腳本實(shí)例所屬類的名稱。
18.根據(jù)權(quán)利要求16所述的系統(tǒng),其特征在于,所述第二創(chuàng)建單元?jiǎng)?chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例的方式具體包括: 所述第二創(chuàng)建單元根據(jù)所述Java類實(shí)例的屬性和方法確定所述待創(chuàng)建的非原生腳本實(shí)例的定義,并根據(jù)該定義創(chuàng)建所述待創(chuàng)建的非原生腳本實(shí)例。
19.根據(jù)權(quán)利要求15所述的系統(tǒng),其特征在于,所述腳本代理模塊進(jìn)一步包括: 預(yù)加載單元,用于在所述解析單元解析頁面腳本前,確定所述插件描述文件中第三屬性值為會(huì)話屬性值的映射關(guān)系,并創(chuàng)建該映射關(guān)系指定的Java類實(shí)例及與該Java類實(shí)例對(duì)應(yīng)的非原生腳本實(shí)例。
20.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述相應(yīng)方法為與調(diào)用的非原生腳本實(shí)例的方法具有相同名稱的方法 。
【文檔編號(hào)】G06F9/44GK103543991SQ201210237542
【公開日】2014年1月29日 申請(qǐng)日期:2012年7月9日 優(yōu)先權(quán)日:2012年7月9日
【發(fā)明者】唐虹剛, 黎科峰 申請(qǐng)人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司