專利名稱:一種新型的web應(yīng)用和本地應(yīng)用的交互模式的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用程序和web技術(shù),尤其涉及一種新型的web應(yīng)用和本地應(yīng)用的交互模式。
背景技術(shù):
web應(yīng)用是指那些用戶界面駐留在web瀏覽器中的任何應(yīng)用程序。典型的web應(yīng)用包括網(wǎng)上銀行,GoogleAppsForYourDomain,MicrosoftOfficeLive,webmail,在線日志,等等。
在很多情況下,web應(yīng)用需要使用本地計(jì)算裝置的資源,比如,使用本地用戶的數(shù)字證書和私鑰。然而由于眾所周知的安全原因,web應(yīng)用直接使用本地計(jì)算裝置資源的權(quán)限受到了嚴(yán)格的限制,換句話說,web應(yīng)用不能隨意的使用本地計(jì)算裝置的資源。要讓web應(yīng)用使用本地計(jì)算裝置的資源,通常的方法是在本地計(jì)算裝置中安裝ActiveX控件或Java Applet,并修改本地計(jì)算裝置的設(shè)置(比如,注冊(cè)ActiveX控件,修改Java環(huán)境中的CLASSPATH,等),然后在web應(yīng)用的腳本(script)中調(diào)用其提供的功能。
問題在于這種方法需要在本地計(jì)算裝置中安裝軟件和修改設(shè)置,然而這對(duì)很多用戶來說不是一件容易的事;更重要的是,在很多情況下用戶根本不能在其使用的計(jì)算裝置上安裝軟件,或修改設(shè)置(比如,在圖書館里的公眾計(jì)算機(jī))。
本地應(yīng)用和web應(yīng)用的不同之處在于,前者是直接在本地計(jì)算裝置上運(yùn)行,而后者是在web瀏覽器環(huán)境中運(yùn)行。比如,安裝在本地PC上的“筆記本”應(yīng)用就是一個(gè)直接在本地計(jì)算裝置上運(yùn)行的本地應(yīng)用。正是因?yàn)楸镜貞?yīng)用是直接在本地計(jì)算裝置上運(yùn)行,本地應(yīng)用在本地計(jì)算裝置上比web應(yīng)用享有更高的權(quán)限,可以訪問更多的本地資源(比如,本地計(jì)算裝置的文件系統(tǒng),數(shù)字證書和私鑰,等)。
另外,本地應(yīng)用可以設(shè)計(jì)成既不需要直接安裝在本地計(jì)算裝置上,也不需要修改本地計(jì)算裝置的設(shè)置就可以在本地計(jì)算裝置上運(yùn)行,因此可以拷貝到移動(dòng)存儲(chǔ)內(nèi)(比如U盤),用戶可以隨身攜帶,在任何能使用該移動(dòng)存儲(chǔ)的計(jì)算裝置上運(yùn)行該本地應(yīng)用。
可是如何在既不使用ActiveX控件或Java Applet也不對(duì)本地計(jì)算裝置的設(shè)置做修改的前提下,實(shí)現(xiàn)web應(yīng)用和本地應(yīng)用的交互,使web應(yīng)用能通過本地應(yīng)用來獲取本地計(jì)算裝置的資源和服務(wù)(統(tǒng)稱為本地服務(wù))? 本專利為這些問題提供了解決方案。
發(fā)明內(nèi)容
本發(fā)明的目的在于,提供一種新型的web應(yīng)用和本地應(yīng)用之間交互的模式。該新型模式突破了傳統(tǒng)的web應(yīng)用在瀏覽器中運(yùn)行時(shí)通過腳本直接調(diào)用安裝在本地計(jì)算裝置上的ActiveX控件或Java Applet的模式,采用了本地應(yīng)用根據(jù)web應(yīng)用的需求來驅(qū)動(dòng)web應(yīng)用在web瀏覽器中的HTML文檔對(duì)象模型(DOM)的方式來實(shí)現(xiàn)web應(yīng)用和本地應(yīng)用的交互,從而突破了傳統(tǒng)模式所帶來的局限。
本發(fā)明提供了一種實(shí)現(xiàn)web應(yīng)用和本地應(yīng)用交互的方法,所述方法包括(1)提供一個(gè)web應(yīng)用;(2)提供一個(gè)能運(yùn)行web瀏覽器的本地計(jì)算裝置,比如PC,智能電話,其中所述web瀏覽器為所述web應(yīng)用提供了一個(gè)運(yùn)行環(huán)境,也為用戶提供了一個(gè)和所述web應(yīng)用交互的用戶界面;(3)根據(jù)所述web應(yīng)用的需求設(shè)計(jì)與其交互的協(xié)議,其中所述協(xié)議定義了如何與所述web應(yīng)用交互以及所述web應(yīng)用需要得到的本地服務(wù),比如,得到用戶的數(shù)字簽名,訪問本地計(jì)算裝置的文件系統(tǒng);(4)提供一個(gè)本地應(yīng)用,其中所述本地應(yīng)用是根據(jù)所述協(xié)議的要求開發(fā)出來,能夠和所述web應(yīng)用交互,并提供所述web應(yīng)用需要得到的本地服務(wù);(5)將所述web應(yīng)用加載于所述web瀏覽器上運(yùn)行,所述web瀏覽器為所述web應(yīng)用建立起DOM;(6)在所述本地計(jì)算裝置上運(yùn)行所述本地應(yīng)用,運(yùn)行的方法和運(yùn)行其它本地應(yīng)用是一樣的;(7)所述本地應(yīng)用采用業(yè)界已知的方法連接到所述web瀏覽器上,以訪問所述web應(yīng)用在所述web瀏覽器中的DOM;(8)最后所述本地應(yīng)用按照所述協(xié)議的規(guī)定,通過訪問所述web應(yīng)用在所述web瀏覽器中的DOM的方式,完成與所述web應(yīng)用的交互并為其提供本地服務(wù); 其中,所述的本地服務(wù)包括由本地計(jì)算裝置通過其硬件和軟件提供的服務(wù),也包括可連接到本地計(jì)算裝置的硬件及其上的軟件提供的服務(wù);另外所述的本地服務(wù)可以包括加密,解密和數(shù)字簽名。
在本發(fā)明的一個(gè)實(shí)施中,設(shè)計(jì)與web應(yīng)用交互的協(xié)議包括設(shè)計(jì)特別指令的內(nèi)容和格式。所述特別指令的內(nèi)容由所述web應(yīng)用的需求而定,包括如何與所述web應(yīng)用交互,以及所述web應(yīng)用需要得到的本地服務(wù)。特別指令的格式可以是多種多樣的,需要事先在所述交互協(xié)議中明確歸定。
所述特別指令的內(nèi)容可以直接存放在所述本地應(yīng)用中,在連接到所述web瀏覽器后,所述本地應(yīng)用執(zhí)行所述特別指令的內(nèi)容來完成與所述web應(yīng)用的交互,具體的方法包括完成以下一項(xiàng)或多項(xiàng) (一)對(duì)所述web應(yīng)用的DOM進(jìn)行加工,加工的方法包括在所述web應(yīng)用的DOM中完成下面的一項(xiàng)或多項(xiàng)(1)添加新的HTML元素,(2)刪除HTML元素,(3)修改HTML元素的屬性,(4)觸發(fā)HTML元素的事件,以及(5)修改HTML元素的事件處理函數(shù),使其指向所述本地應(yīng)用中定義的處理函數(shù),以使所述本地應(yīng)用能追蹤和處理在所述web應(yīng)用中發(fā)生的事件; (二)追蹤和處理所述web應(yīng)用的DOM中的事件,具體方法是當(dāng)所述協(xié)議中規(guī)定的需要追蹤和處理的事件發(fā)生時(shí)所述本地應(yīng)用根據(jù)所述特別指令的內(nèi)容修改所述web應(yīng)用的DOM;也即當(dāng)所述特別指令中規(guī)定的需要追蹤和處理的事件發(fā)生時(shí),在所述本地應(yīng)用中定義的處理函數(shù)被調(diào)用,所述處理函數(shù)根據(jù)所述特別指令的內(nèi)容對(duì)所述web應(yīng)用的DOM進(jìn)行加工,為所述web應(yīng)用提供服務(wù)。
所述特別指令也可以存放在所述web應(yīng)用中,在連接到所述web應(yīng)用后,所述本地應(yīng)用首先從所述web應(yīng)用中取出所述特別指令,然后根據(jù)上面所述的方法執(zhí)行所得到的特別指令。這一種方法的好處是本地應(yīng)用可以設(shè)計(jì)的更加通用,能為多個(gè)web應(yīng)用提供本地服務(wù)。
將特別指令存放在web應(yīng)用中的方法之一是在交互協(xié)議中定義識(shí)別號(hào),并根據(jù)所述識(shí)別號(hào)將特別指令存入所述web應(yīng)用中;所述本地應(yīng)用在連接到所述web應(yīng)用后根據(jù)所述識(shí)別號(hào)從所述web應(yīng)用中取出所述特別指令。
一種將特別指令存放在web?應(yīng)用中的具體方法包括(1)在所述web應(yīng)用中指定用于存放特別指令的HTML元素,必要時(shí)可以在web應(yīng)用中添加新的HTML元素;(2)將交互協(xié)議中定義的識(shí)別號(hào)分配給所述指定的HTML元素,分配的方法可以是將所述識(shí)別號(hào)存入所述HTML元素的id屬性中;(3)在所述指定HTML元素的屬性中指定用于存放特別指令的屬性;(4)將所述特別指令存入所述HTML元素的用于存放特別指令的屬性中。本地應(yīng)用在連接到web應(yīng)用后,根據(jù)所述協(xié)議中定義的識(shí)別號(hào),從所述web應(yīng)用中找出所述HTML元素,并從所述元素的用于存放特別指令的屬性中取出所述特別指令。
在具體實(shí)施中,特別指令可以由一條或多條子指令組成,還可以包括用于從web應(yīng)用中取出其它特別指令的信息。
本發(fā)明還提供了一種web應(yīng)用和本地應(yīng)用交換信息的方法,所述方法包括在設(shè)計(jì)與所述web應(yīng)用交互的協(xié)議時(shí)(1)在所述web應(yīng)用的HTML元素中指定一個(gè)用于將交換信息從web應(yīng)用傳至本地應(yīng)用的傳出元素和一個(gè)用于將交換信息從本地應(yīng)用傳至web應(yīng)用的傳入元素,必要時(shí)添加新的元素;(2)為所述傳出和傳入元素分配識(shí)別號(hào),并確定其用于存放交換信息的屬性;(3)在所述傳出元素中指定傳出事件,并將所述傳出事件的處理函數(shù)指向所述本地應(yīng)用中定義的處理函數(shù);(4)在所述傳入元素中指定傳入事件,并將所述傳入事件的處理函數(shù)指向所述web應(yīng)用中定義的處理函數(shù)。至此,所述本地應(yīng)用就可以和所述web應(yīng)用進(jìn)行信息交換。
當(dāng)所述web應(yīng)用需要把交換信息傳遞給所述本地應(yīng)用時(shí),所述web應(yīng)用(1)將所述交換信息存放于所述傳出元素的用于存放交換信息的屬性中;(2)通過觸發(fā)所述傳出元素中指定的傳出事件來通知所述本地應(yīng)用有需要其處理的交換信息;(3)在所述本地應(yīng)用中定義的處理函數(shù)從所述傳出元素的用于存放交換信息的屬性中取出所述交換信息; 當(dāng)所述本地應(yīng)用需要把交換信息傳遞給所述web應(yīng)用時(shí),所述本地應(yīng)用(1)將所述交換信息存入所述傳入元素的用于存放交換信息的屬性中;(2)通過觸發(fā)所述傳入元素中指定的傳入事件來通知所述web應(yīng)用有需要其處理的交換信息;(3)在所述web應(yīng)用中定義的處理函數(shù)從所述傳入元素的用于存放交換信息的屬性中取出所述交換信息。
在具體實(shí)施中,所述特別指令可以包括上面所述的交互協(xié)議的內(nèi)容,在執(zhí)行所述特別指令的相關(guān)內(nèi)容時(shí)所述web應(yīng)用和所述本地應(yīng)用根據(jù)上面所述的方法交換信息。
在閱讀完下面的具體實(shí)施方式
以及相關(guān)附圖后,本發(fā)明的的思想,特征和優(yōu)點(diǎn)會(huì)更加明確。
圖1-web應(yīng)用的運(yùn)作環(huán)境 圖2-交互協(xié)議 圖3-特別指令及其在web應(yīng)用中的存放方法 圖4-web應(yīng)用和本地應(yīng)用交互的基本流程 圖5-特別指令和子指令 圖6-特別指令和其它特別指令 圖7-用戶認(rèn)證示范例 圖8-解密示范例 圖9-信息交換的方法 具體實(shí)施例方式 圖1展示了web應(yīng)用222的一個(gè)運(yùn)作環(huán)境一個(gè)web應(yīng)用服務(wù)器100,一個(gè)web瀏覽器220和一個(gè)本地應(yīng)用230,其中web瀏覽器220和本地應(yīng)用230在同一個(gè)本地計(jì)算裝置上運(yùn)行。web瀏覽器220為web應(yīng)用222提供了一個(gè)運(yùn)行環(huán)境,也為用戶提供了一個(gè)和web應(yīng)用222交互的用戶界面。本地應(yīng)用230的作用是幫助web應(yīng)用222獲取其不能直接從本地計(jì)算裝置200獲得的本地服務(wù)。
值得注意的是圖1中所示的交互協(xié)議800,該協(xié)議定義了如何與web應(yīng)用222交互以及web應(yīng)用222需要得到的本地服務(wù)。本地應(yīng)用230也是根據(jù)交互協(xié)議800的要求設(shè)計(jì)開發(fā)出來,能夠和web應(yīng)用222交互,并為web應(yīng)用222提供其需要得到的本地服務(wù)。
如圖2所示,在一個(gè)具體的實(shí)施中,交互協(xié)議800包括特別指令820和特別指令存放方法860。特別指令820的內(nèi)容由web應(yīng)用222的需求而定,包括如何與web應(yīng)用222交互,以及web應(yīng)用222需要得到的本地服務(wù)。特別指令820的格式也可以是多種多樣的。
特別指令存放方法860基本上講有兩種一種是將特別指令820存入本地應(yīng)用230中,另一種方法是將特別指令820存入web應(yīng)用222中。第一種方法的好處是本地應(yīng)用230在連接到web應(yīng)用222后可以直接執(zhí)行存于本地應(yīng)用230中的特別指令820。如果采用第二種方法,本地應(yīng)用230在連接到web應(yīng)用222后,首先需要從web應(yīng)用222中取出特別指令820,然后再執(zhí)行特別指令820的內(nèi)容;這種方法的好處是本地應(yīng)用230可以設(shè)計(jì)得更加通用,因?yàn)樘貏e指令820是從web應(yīng)用222得到的,而不是事先存于本地應(yīng)用230中。
如圖3所示,將特別指令820存入web應(yīng)用222的方法可以采用在特別指令存放方法860中定義識(shí)別號(hào),并根據(jù)所述識(shí)別號(hào)將特別指令820存入web應(yīng)用222中;本地應(yīng)用230根據(jù)特別指令存放方法860從web應(yīng)用222在瀏覽器220的DOM中取出特別指令820。
一種將特別指令820存放在web?應(yīng)用222中的具體方法包括(1)在web應(yīng)用222中指定用于存放特別指令820的HTML元素,必要時(shí)可以在web應(yīng)用222中添加新的HTML元素;(2)將交互協(xié)議800的特別指令存放方法860中定義的識(shí)別號(hào)分配給所述HTML元素,分配的方法可以是將所述識(shí)別號(hào)存入所述HTML元素的id屬性中;(3)在所述指定HTML元素的屬性中指定用于存放特別指令的屬性;(4)將特別指令820存入所述HTML元素的用于存放特別指令的屬性中。
當(dāng)本地應(yīng)用230通過web瀏覽器220連接到web應(yīng)用222后,根據(jù)特別指令存放方法860中定義的識(shí)別號(hào),從web應(yīng)用222在瀏覽器220的DOM中找出所述HTML元素,并從所述HTML元素的用于存放特別指令的屬性中取出特別指令820。然后本地應(yīng)用230按照特別指令820的內(nèi)容與web應(yīng)用222交互,并為其提供本地服務(wù)。
參閱圖4所示,在一個(gè)具體實(shí)施中web應(yīng)用222和本地應(yīng)用230交互的基本流程,包括以下步驟 第一,啟動(dòng)web應(yīng)用。用戶使用web瀏覽器220啟動(dòng)web應(yīng)用222,其方法是將web瀏覽器220指向提供web應(yīng)用222的web應(yīng)用服務(wù)器100的URL。
第二,請(qǐng)求送至web應(yīng)用服務(wù)器。web瀏覽器220將該請(qǐng)求通過計(jì)算機(jī)網(wǎng)絡(luò)送至web應(yīng)用服務(wù)器100;響應(yīng)于該請(qǐng)求,web應(yīng)用服務(wù)器100將web應(yīng)用222通過計(jì)算機(jī)網(wǎng)絡(luò)發(fā)送給web瀏覽器220。
第三,web應(yīng)用下載到瀏覽器。web瀏覽器220通過計(jì)算機(jī)網(wǎng)絡(luò)從web應(yīng)用服務(wù)器100接受web應(yīng)用222,并開始運(yùn)行web應(yīng)用222。作為web應(yīng)用222的運(yùn)行環(huán)境,web瀏覽器220為web應(yīng)用222建立起DOM。
第四,連接于web瀏覽器。本地應(yīng)用230通過業(yè)界已知的方法連接到web瀏覽器220,并進(jìn)一步通過web瀏覽器220訪問web應(yīng)用222的DOM。
第五,取出特別指令。如果特別指令存放方法860是將特別指令820存放于web應(yīng)用222中,本地應(yīng)用230通過web瀏覽器220連接到web應(yīng)用222后,使用特別指令存放方法860中規(guī)定的方法從web應(yīng)用222在web瀏覽器220的DOM中取出特別指令820。如果特別指令存放方法860是將特別指令820存放于本地應(yīng)用230中,本地應(yīng)用230不執(zhí)行這一步。
第六,執(zhí)行特別指令。本地應(yīng)用230得到特別指令820后,首先對(duì)所得到的特別指令820進(jìn)行解析,以獲取指令的內(nèi)容,然后處理所述指令的內(nèi)容,處理的方法是根據(jù)所述指令的內(nèi)容對(duì)web應(yīng)用222在web瀏覽器220的DOM進(jìn)行加工。
對(duì)web應(yīng)用222在web瀏覽器220的DOM進(jìn)行加工包括在web應(yīng)用222的DOM中完成以下一項(xiàng)或多項(xiàng)(1)添加新的HTML元素;(2)刪除HTML元素;(3)修改HTML元素的屬性;(4)觸發(fā)HTML元素的事件,以及(5)修改HTML元素的事件處理函數(shù),使其指向在本地應(yīng)用230中定義的處理函數(shù),這樣一來本地應(yīng)用230就可以追蹤和處理web應(yīng)用222中的事件。
執(zhí)行特別指令也可以包括追蹤和處理事件。如果特別指令820中規(guī)定了需要本地應(yīng)用230追蹤和處理的事件,在解析和處理特別指令820時(shí),web應(yīng)用222在web瀏覽器的DOM中相應(yīng)的HTML元素的事件處理函數(shù)已經(jīng)被修改并指向本地應(yīng)用中定義的處理函數(shù)。當(dāng)特別指令820中規(guī)定的需要追蹤和處理的事件發(fā)生時(shí),在本地應(yīng)用230中定義的處理函數(shù)被調(diào)用,所述處理函數(shù)根據(jù)特別指令820的內(nèi)容處理該事件,為web應(yīng)用222提供服務(wù)。
如圖5所示,在一個(gè)具體實(shí)施中,特別指令820包括一個(gè)或多個(gè)子指令。本地應(yīng)用230按照順序解析和處理每一條子指令。
如圖6所示,在一個(gè)具體實(shí)施中,除了特別指令820外,web應(yīng)用222還可以存放一個(gè)或多個(gè)其它特別指令880。存入和取出其它特別指令880的方法和上面介紹的存入和取出特別指令820的方法是一樣的。
在另一個(gè)具體實(shí)施中,特別指令820包括從web應(yīng)用222中取出其它特別指令880的信息;本地應(yīng)用230根據(jù)所述信息從web應(yīng)用222中取出其它特別指令880,然后根據(jù)前面介紹的執(zhí)行特別指令820的方式完成本地應(yīng)用和web應(yīng)用的交互。
在介紹完web應(yīng)用222和本地應(yīng)用230交互的基本流程后,下面通過幾個(gè)示范例來對(duì)本發(fā)明的思想做進(jìn)一步描述。
在下面介紹的示范例中,特別指令820采用了XML。XML特別指令820是用前面介紹的特別指令存放方法860存放于web應(yīng)用222中;本地應(yīng)用根據(jù)特別指令存放方法860從web應(yīng)用222的DOM中取出XML特別指令820。
存取特別指令示范利 在一個(gè)存取特別指令的示范例子中,web應(yīng)用222中的一個(gè)input元素被指定用來存放特別指令820,同時(shí)特別指令存放方法860規(guī)定將識(shí)別號(hào)cmds_id分配給所述input元素的id屬性中,并將特別指令820存于所述input元素的value屬性中。該示范例相關(guān)的HTML元素的定義如下 <input type=″hidden″id=″cmds_id″value=″特別指令820″/> 本地應(yīng)用230根據(jù)特別指令存放方法860中定義的識(shí)別號(hào)cmds_id從web應(yīng)用222的DOM中找出存有特別指令820的id屬性為cmds_id的HTML元素后,按照特別指令存放方法860的規(guī)定從所述HTML元素的value屬性中取出特別指令820,如下例所示 document.getElementById(″cmds_id″).value 用戶認(rèn)證示范例 現(xiàn)參閱圖7所示的用戶認(rèn)證示范例,該示范例采用數(shù)字簽名來實(shí)現(xiàn)用戶認(rèn)證。產(chǎn)生數(shù)字簽名需要訪問用戶的私鑰,所以web應(yīng)用222需要通過本地應(yīng)用230來獲得用戶的數(shù)字簽名。該示范例中的web應(yīng)用222的表單設(shè)計(jì)如下 <p><strong>登錄“WEB應(yīng)用”</strong></p> <form action=″AuthCHS.asp″id=″auth_form″method=″post″> <input type=″hidden″id=″cmds_id″value=″<%=sCmdsXML%>″/> <label>用戶名</label> <input type=″text″id=″user_id″name=″user_id″/> <input type=″hidden″id=″nonce_from_server″value=″<%=sNonce%>″/> <input type=″hidden″id=″user_signature″name=″user_signature″/> <input type=″button″id=″submit_button″value=″登錄″/> </form> 該表單有五個(gè)input元素,其中,id為cmds_id的input元素的value屬性以<%=sCmdsXML%>形式存有特別指令820,和前面介紹的存取特別指令示范利中所示的方法是一樣的,id為user_id的input元素的value屬性用于存儲(chǔ)用戶輸入的用戶名,id為nonce_from_server的input元素的value屬性存有從web應(yīng)用服務(wù)器100而來的nonce,id為user_signature的input元素的value屬性用于存儲(chǔ)用戶的數(shù)字簽名,id為submit_button的input元素用于提交表單。
下面的XML是根據(jù)該示范例設(shè)計(jì)的特別指令820的內(nèi)容和格式 <?xml version=″1.0″e(cuò)ncoding=″utf-8″?> <cmds> <cmd> <trigger> <element id=″submit_button″> <events> <event>onclick</event> </events> </element> </trigger> <action name=″sign″> <source> <element id=″nonce_from_server″> <attributes> <attribute>value</attribute> </attributes> </element> </source> <target> <element id=″user_signature″> <attributes> <attribute>value</attribute> </attributes> </element> </target> </action> <action name=″submit″> <form id=″auth_form″/> </action> </cmd> </cmds> 該指令的含義是“在接收到識(shí)別號(hào)為submit_button的HTML元素的onclick事件時(shí),取出識(shí)別號(hào)為nonce_from_server的HTML元素的value屬性的值,將其進(jìn)行數(shù)字簽名后存于識(shí)別號(hào)為user_signature的HTML元素的value屬性之中,最后提交識(shí)別號(hào)為auth_form的表單”。
本地應(yīng)用230采用存取特別指令示范例中描述的方法從web應(yīng)用222的DOM中取出特別指令820。得到該指令后,本地應(yīng)用230(1)在web應(yīng)用222的DOM中找到識(shí)別號(hào)為submit_button的HTML元素;(2)修改該HTML元素的onclick事件的處理函數(shù),使其指向本地應(yīng)用中定義的處理函數(shù),以使本地應(yīng)用230能追蹤和處理該事件。
該事件發(fā)生后,本地應(yīng)用230(1)取出識(shí)別號(hào)為nonce_from_server的HTML元素的value屬性的值,將其進(jìn)行數(shù)字簽名后存于識(shí)別號(hào)為user_signature的HTML元素的value屬性之中;(2)提交識(shí)別號(hào)為auth_form的HTML表單。這樣一來,web應(yīng)用222就通過本地應(yīng)用230得到了其不能直接得到的本地服務(wù),即用戶的數(shù)字簽名。
需要說明的是,該示范例采用了ActiveServerPage(ASP)技術(shù),所以前面所述的XML特別指令820以<%=sCmdsXML%>形式存入id為cmds_id的input元素的value屬性中,其中sCmdXML為web應(yīng)用服務(wù)器100中的一個(gè)存有特別指令820的變量。同樣,sNonce也是web應(yīng)用服務(wù)器100中的一個(gè)存有該服務(wù)器生成的nonce的變量。
解密示范例 現(xiàn)參閱圖8所示的解密示范例,當(dāng)用戶選擇“顯示明文”時(shí),需要使用用戶的私鑰來解密被加密的內(nèi)容。該示范例中有關(guān)的HTML元素的定義如下 <p><strong>WEB應(yīng)用解密</strong></p> <div id=″cmds_id″value=″<%=sCmdsXML%>″/> <input type=″checkbox″id=″show_clear_text″/> <label>顯示明文</label> <div id=″content″style=″font-family:Courier New;font-size:small″> MIIBMwYJKoZIhvcNAQcDoIIBJDCCASACAQAxgeUwgeICAQAwSzA3MRIwEAYDVQQD<br/> EwlCb2IgRXZhbnMxITAfBgkqhkiG9w0BCQEWEmJldmFuc0BteGNzb2Z0LmNvbQIQ<br/> MHURSKzjFnCPnEVXUG/ZwzANBgkqhkiG9w0BAQEFAASBgIeWqGTxaYwB4Y0DkWBC<br/> CWF0Ru/covLyBD7goilj3MvK/bYnfWG1lg4jxFhgeP8d179G4fLKvIxJpaFvR019<br/> rvvek2vVI4HNJXkpV/xeswHoSH4K1QZ53uXb7xPcrVKhFZm4RLf1tYyKTX1QaqLW<br/> 35I3NUWNMRKqJAIEnUBlilPAMDMGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI3spI<br/> ORaDAP2AEBi1/5rhG2KsCsjlTTkTe4I=<br/> </div> 其中,特別指令820以<%=sCmdsXML%>形式存于id為cmds_id的div元素的value屬性中,和前面介紹的存取特別指令示范利中所示的方法是一樣的,加密的內(nèi)容存于id為content的div元素的innerText屬性之中,另外還有一個(gè)id為show_clear_text的input復(fù)選框元素。當(dāng)用戶復(fù)選該復(fù)選框時(shí),解密后的明文就取代密文在web瀏覽器220中顯示出來。
針對(duì)該示范例設(shè)計(jì)的XML特別指令820的內(nèi)容和格式如下 <?xml version=″1.0″e(cuò)ncoding=″utf-8″?> <!--Instructions for local application--> <cmds> <cmd> <trigger> <element id=″show_clear_text″> <events> <event>onclick</event> </events> </element> </trigger> <action name=″decrypt″> <source> <element id=″content″> <attributes> <attribute>innerText</attribute> </attributes> </element> </source> <target> <element id=″content″> <attributes> <attribute>innerText</attribute> </attributes> </element> </target> </action> </cmd> </cmds> 該指令的含義是“在接收到識(shí)別號(hào)為show_clear_text的HTML元素的onclick事件時(shí),取出識(shí)別號(hào)為content的HTML元素的innerText屬性的值,將其解密后存于識(shí)別號(hào)為content的HTML元素的innerText屬性之中”。
本地應(yīng)用230采用存取特別指令示范例中描述的方法從web應(yīng)用222的DOM中取出特別指令820。得到該指令后,本地應(yīng)用230(1)在web應(yīng)用222的DOM中找到識(shí)別號(hào)為show_clear_text的HTML元素;(2)修改該HTML元素的onclick事件的處理函數(shù),使其指向本地應(yīng)用中定義的處理函數(shù),以使本地應(yīng)用能追蹤和處理該事件。該事件發(fā)生后,本地應(yīng)用230(1)取出識(shí)別號(hào)為content的HTML元素的innerText屬性的值,使用用戶的私鑰將其解密后存于識(shí)別號(hào)為content的HTML元素的innerText屬性之中。這樣以來web應(yīng)用222通過本地應(yīng)用230得到了本地服務(wù),即使用用戶的私鑰對(duì)密文解密。
同樣需要說明的是,該示范例采用了ASP技術(shù),所以前面所述的XML特別指令820以<%=sCmdsXML%>方式存入id為cmds_id的div元素的value屬性中,其中sCmdXML為web應(yīng)用服務(wù)器100中的一個(gè)存有特別指令820的變量。
其它特別指令示范例 在下面示范例中,圖6所示的其它特別指令880的存放方法和存放特別指令820的方法一樣的。
<input type=″hidden″id=″cmds_id″value=″特別指令820″/> <input type=″hidden″id=″other_cmds″value=″其它特別指令880″/> 針對(duì)上面所述的其它特別指令880在web應(yīng)用中的存放方式設(shè)計(jì)的XML特別指令820中取出其他特別指令880的部分如下 <?xml version=″1.0″e(cuò)ncoding=″utf-8″?> <cmds> <cmd> <action name=″loadcmds″> <element id=″other_cmds″> <attributes> <attribute>value</attribute> </attributes> </element> </action> </cmd> </cmds> 其含義是“從識(shí)別號(hào)為other_cmds的HTML元素的value屬性中取出其它特別指令880”。
檢查本地應(yīng)用狀態(tài)和能力的示范例 該示范例用于介紹web應(yīng)用查尋本地應(yīng)用狀態(tài)和能力的方法。在本示范例中,web應(yīng)用222包括一個(gè)id為local_app_info的隱藏input元素,如下所示 <input type=″hidden″id=″local_app_info″value=″″/> 該input元素的value屬性的初始值為空,表示本地應(yīng)用230的狀態(tài)和能力未知。該input元素的value屬性的值將由本地應(yīng)用230來設(shè)置。web應(yīng)用222根據(jù)該input元素的value屬性的值來得到本地應(yīng)用230的狀態(tài)和能力,以便根據(jù)本地應(yīng)用230的狀態(tài)和能力做出合適的選擇和動(dòng)作,比如在本地應(yīng)用230沒有運(yùn)行時(shí),提示用戶啟動(dòng)本地應(yīng)用230。
針對(duì)該示范例所設(shè)計(jì)的特別指令820如下 <?xml version=″1.0″e(cuò)ncoding=″utf-8″?> <cmds> <cmd> <action name=″info″> <element id=″local_app_info″> <attributes> <attribute>value</attribute> </attributes> </element> </action> </cmd> </cmds> 該特別指令820的含義是“將有關(guān)本地應(yīng)用230的狀態(tài)和能力的信息存入id為local_app_info的HTML元素的value屬性中”。本地應(yīng)用230根據(jù)該指令的要求從web應(yīng)用222的DOM中找出id為local_app_info的HTML元素,然后將有關(guān)本地應(yīng)用230的狀態(tài)和能力的信息存入id為local_app_info的HTML元素的value屬性中。
假設(shè)該示范例中的本地應(yīng)用230可以加密和數(shù)字簽名,該元素的value屬性的值可設(shè)為“running=1;encrypt=1;sign=1”,表示“本地應(yīng)用正在運(yùn)行,可以做加密和數(shù)字簽名”。經(jīng)過本地應(yīng)用230修改后的input元素就成了 <input type=″hidden″id=″local_app_info″value=″running=1;encrypt=1;sign=1″ /> 需要指出的一點(diǎn)是,web應(yīng)用222可以用查詢的方式來得到該反饋信息,也可以通過給該元素在web應(yīng)用222中設(shè)計(jì)和指派事件處理函數(shù)的方式來得到該反饋信息。
一種web應(yīng)用和本地應(yīng)用交換信息的方法 現(xiàn)在參閱圖9所示的一種web應(yīng)用和本地應(yīng)用交換信息的方法的實(shí)施例。
首先,在web應(yīng)用222中添加一個(gè)用于將交換信息從web應(yīng)用222傳至本地應(yīng)用230的傳出元素和一個(gè)用于將交換信息從本地應(yīng)用230傳至web應(yīng)用222的傳入元素;給所述傳出元素的識(shí)別號(hào)定義為info_to_local_app,所述傳入元素的識(shí)別號(hào)定義為info_from_local_app,同時(shí)約定交換信息存于傳出和傳入元素的value屬性中;在所述傳出元素中指定onclick為傳出事件;在所述傳入元素中指定onclick為傳入事件,并將所述傳入事件的處理函數(shù)指向web應(yīng)用222中定義的處理函數(shù)ProcessLocalInfo。
該示范例中相關(guān)的HTML元素的定義如下 <div> <input type=″hidden″id=″info_to_local_app″/> <input type=″hidden″id=″info_from_local_app″onclick=″ProcessLocalInfo()″ /> </div> 在連接到web應(yīng)用222后,本地應(yīng)用230用所述傳出元素的識(shí)別號(hào)info_to_local_app從web應(yīng)用222中找出所述傳出元素,然后修改所述傳出事件的處理函數(shù),使其指向本地應(yīng)用230中定義的處理函數(shù)ProcessWebInfo;至此,本地應(yīng)用230就可以和web應(yīng)用222進(jìn)行信息交換。
當(dāng)web應(yīng)用222需要把交換信息傳遞給本地應(yīng)用230時(shí),web應(yīng)用222(1)將需要傳遞的交換信息存入所述傳出元素的value屬性中;(2)通過觸發(fā)傳出元素的onclick事件的方式通知本地應(yīng)用230,有需要其處理的交換信息;(3)本地應(yīng)用230的處理函數(shù)ProcessWebInfo從所述傳出元素的value屬性中取出交換信息,進(jìn)行處理。
同樣的方式,當(dāng)本地應(yīng)用230需要把交換信息傳遞給web應(yīng)用222時(shí),本地應(yīng)用230(1)將需要傳遞的交換信息存入所述傳入元素的value屬性中;(2)通過觸發(fā)傳入元素的onclick事件的方式通知web應(yīng)用222,有需要其處理的交換信息;(3)web應(yīng)用222的處理函數(shù)ProcessLocalInfo從所述傳入元素的value屬性中取出交換信息,進(jìn)行處理。
描述上述交互過程的XML特別指令820可以定義如下 <?xml version=″1.0″e(cuò)ncoding=″utf-8″?> <cmds> <!--其它子指令--> <cmd> <action name=″interact″> <input> <element id=″info_to_local_app″> <attribute>value</attribute> <event>onclick</event> </element> </input> </action> <action name=″interact″> <output> <element id=″info_from_local_app″> <attribute>value</attribute> <event>onclick</event> </element> </output> </action> </cmd> <!--其它子指令--> </cmds> 該特別指令的含義是“(1)在id為info_to_local_app的HTML元素的onclick事件發(fā)生時(shí),從該元素的value屬性中取出web應(yīng)用222傳遞給本地應(yīng)用230的交換信息;(2)本地應(yīng)用230在傳回交換信息給web應(yīng)用222時(shí),將交換信息存于id為info_from_local_app的HTML元素的value屬性中,然后觸發(fā)該HTML元素的onclick事件通知web應(yīng)用?!? 得到該指令后,本地應(yīng)用230開始監(jiān)聽id為info_to_local_app的HTML元素的onclick事件,在該事件發(fā)生時(shí)從該元素的value屬性中取出web應(yīng)用222傳給本地應(yīng)用230的交換信息,同時(shí)根據(jù)指令的要求,在需要將本地應(yīng)用230的交換信息傳回給web應(yīng)用222時(shí),將所述信息存于id為info_from_local_app的HTML元素的value屬性中,然后觸發(fā)該HTML元素的onclick事件通知web應(yīng)用222。
需要強(qiáng)調(diào)的是,上述示范例是為了介紹本發(fā)明的思想,實(shí)施本發(fā)明的具體方法可以是多種多樣的。
權(quán)利要求
權(quán)利要求1一種實(shí)現(xiàn)web應(yīng)用和本地應(yīng)用交互的方法,采用了本地應(yīng)用根據(jù)web應(yīng)用的需求來驅(qū)動(dòng)web應(yīng)用在web瀏覽器中的HTML文檔對(duì)象模型(DOM)的方式來實(shí)現(xiàn)web應(yīng)用和本地應(yīng)用的交互,其特征在于,所述方法包括
a.提供一個(gè)web應(yīng)用;
b.提供一個(gè)能運(yùn)行web瀏覽器的計(jì)算裝置,其中所述web瀏覽器為所述web應(yīng)用提供了一個(gè)運(yùn)行環(huán)境,也為用戶提供了一個(gè)和所述web應(yīng)用交互的用戶界面;
c.設(shè)計(jì)與所述web應(yīng)用交互的協(xié)議;
d.提供一個(gè)本地應(yīng)用,其中所述本地應(yīng)用是根據(jù)所述協(xié)議的要求開發(fā)出來的;
e.將所述web應(yīng)用加載于所述web瀏覽器上運(yùn)行,建立起所述web應(yīng)用的DOM;
f.在所述計(jì)算裝置上運(yùn)行所述本地應(yīng)用;
g.所述本地應(yīng)用連接到裝載了所述web應(yīng)用的所述web瀏覽器上,以訪問所述web應(yīng)用的DOM;
h.通過直接訪問所述web應(yīng)用的DOM的方式,所述本地應(yīng)用按照所述協(xié)議的要求完成與所述web應(yīng)用的交互。
權(quán)利要求2如權(quán)利要求1所述的方法,其特征在于,所述協(xié)議的內(nèi)容包括如何與所述web應(yīng)用交互,以及所述web應(yīng)用需要得到的本地服務(wù)。
權(quán)利要求3如權(quán)利要求2所述的方法,其特征在于,所述本地服務(wù)包括所述計(jì)算裝置通過其硬件和軟件提供的服務(wù)。
權(quán)利要求4如權(quán)利要求3所述的方法,其特征在于,所述硬件和軟件包括可連接到所述計(jì)算裝置的硬件以及其上的軟件。
權(quán)利要求5如權(quán)利要求1所述的方法,其特征在于,設(shè)計(jì)與所述web應(yīng)用交互的協(xié)議包括根據(jù)所述web應(yīng)用設(shè)計(jì)特別指令的內(nèi)容和格式。
權(quán)利要求6如權(quán)利要求5所述的方法,其特征在于,還包括在連接到所述web瀏覽器后,所述本地應(yīng)用執(zhí)行所述特別指令來完成所述協(xié)議要求的與所述web應(yīng)用的交互。
權(quán)利要求7如權(quán)利要求6所述的方法,其特征在于,所述本地應(yīng)用執(zhí)行所述特別指令包括根據(jù)所述特別指令的內(nèi)容完成以下一項(xiàng)或多項(xiàng)
a.對(duì)所述web應(yīng)用的DOM進(jìn)行加工;
b.追蹤和處理所述web應(yīng)用的DOM中的事件。
權(quán)利要求8如權(quán)利要求7所述的方法,其特征在于,對(duì)所述web應(yīng)用的DOM進(jìn)行加工包括在所述web應(yīng)用的DOM中完成以下一項(xiàng)或多項(xiàng)
a.添加新的HTML元素;
b.刪除HTML元素;
c.修改HTML元素的屬性;
d.觸發(fā)HTML元素的事件;
e.修改HTML元素的事件處理函數(shù)。
權(quán)利要求9如權(quán)利要求8所述的方法,其特征在于,修改HTML元素的事件處理函數(shù)的方法是使其指向所述本地應(yīng)用中定義的處理函數(shù),以使所述本地應(yīng)用能追蹤和處理在所述web應(yīng)用中發(fā)生的事件。
權(quán)利要求10如權(quán)利要求7所述的方法,其特征在于,追蹤和處理所述web應(yīng)用的DOM中的事件包括當(dāng)事件發(fā)生時(shí)所述本地應(yīng)用根據(jù)所述特別指令的內(nèi)容修改所述web應(yīng)用的DOM。
權(quán)利要求11如權(quán)利要求5所述的方法,其特征在于,還包括在所述與web應(yīng)用交互的協(xié)議中定義識(shí)別號(hào),并根據(jù)所述識(shí)別號(hào)將所述特別指令存入所述web應(yīng)用中。
權(quán)利要求12如權(quán)利要求11所述的方法,其特征在于,將所述特別指令存入所述web應(yīng)用中的方法包括
a.在所述web應(yīng)用中指定HTML元素,必要時(shí)添加新的元素;
b.將所述識(shí)別號(hào)分配給所述指定HTML元素;
c.在所述指定HTML元素的屬性中指定用于存放特別指令的屬性;
d.將所述特別指令存入所述指定HTML元素的指定用于存放特別指令的屬性中。
權(quán)利要求13如權(quán)利要求12所述的方法,其特征在于,將所述識(shí)別號(hào)分配給所述指定HTML元素的方法是將所述識(shí)別號(hào)存放于所述指定HTML元素的id屬性中。
權(quán)利要求14如權(quán)利要求12所述的方法,其特征在于,還包括在所述本地應(yīng)用連接到所述web瀏覽器后,根據(jù)所述識(shí)別號(hào)從所述web應(yīng)用中找出所述指定HTML元素,并從其指定用于存放特別指令的屬性中取出所述特別指令。
權(quán)利要求15如權(quán)利要求5所述的方法,其特征在于,所述特別指令包括一條或多條子指令。
權(quán)利要求1616.如權(quán)利要求5所述的方法,其特征在于,所述特別指令包括從所述web應(yīng)用中取出其它特別指令的內(nèi)容。
權(quán)利要求17如權(quán)利要求1所述的方法,其特征在于,設(shè)計(jì)與所述web應(yīng)用交互的協(xié)議包括
a.在所述web應(yīng)用的HTML元素中指定一個(gè)用于將交換信息從web應(yīng)用傳至本地應(yīng)用的傳出元素和一個(gè)用于將交換信息從本地應(yīng)用傳至web應(yīng)用的傳入元素,必要時(shí)添加新的元素;
b.為所述傳出和傳入元素分配識(shí)別號(hào),并確定其用于存放交換信息的屬性;
c.在所述傳出元素中指定傳出事件,并將所述傳出事件的處理函數(shù)指向所述本地應(yīng)用中定義的處理函數(shù);
d.在所述傳入元素中指定傳入事件,并將所述傳入事件的處理函數(shù)指向所述web應(yīng)用中定義的處理函數(shù);
至此,所述本地應(yīng)用就可以和所述web應(yīng)用交換信息,方法包括
當(dāng)所述web應(yīng)用需要把交換信息傳遞給所述本地應(yīng)用時(shí),所述web應(yīng)用
a.將所述交換信息存放于所述傳出元素的用于存放交換信息的屬性中;
b.通過觸發(fā)所述傳出元素中指定的傳出事件來通知所述本地應(yīng)用有需要其處理的交換信息;
c.在所述本地應(yīng)用中定義的處理函數(shù)從所述傳出元素的用于存放交換信息的屬性中取出所述交換信息;
當(dāng)所述本地應(yīng)用需要把交換信息傳遞給所述web應(yīng)用時(shí),所述本地應(yīng)用
a.將所述交換信息存入所述傳入元素的用于存放交換信息的屬性中;
b.通過觸發(fā)所述傳入元素中指定的傳入事件來通知所述web應(yīng)用有需要其處理的交換信息;
c.在所述web應(yīng)用中定義的處理函數(shù)從所述傳入元素的用于存放交換信息的屬性中取出所述交換信息。
權(quán)利要求18如權(quán)利要求5所述的方法,其特征在于,所述特別指令包括如權(quán)利要求17中所述的交互協(xié)議的內(nèi)容,在執(zhí)行所述特別指令的相關(guān)內(nèi)容時(shí)所述web應(yīng)用和所述本地應(yīng)用以權(quán)利要求17中所述的方法交換信息。
權(quán)利要求19一種實(shí)現(xiàn)權(quán)利要求1中所述的本地應(yīng)用的計(jì)算機(jī)程序,其特征在于,當(dāng)所述計(jì)算機(jī)程序由計(jì)算裝置執(zhí)行時(shí),使所述計(jì)算裝置執(zhí)行如權(quán)利要求1所述的方法。
權(quán)利要求20一種能夠執(zhí)行如權(quán)利要求1所述的方法的計(jì)算機(jī)控制的裝置。
全文摘要
本發(fā)明提供一種新型的web應(yīng)用和本地應(yīng)用的交互模式。該新型模式突破了傳統(tǒng)的web應(yīng)用在瀏覽器中運(yùn)行時(shí)通過腳本(script)直接調(diào)用安裝在本地計(jì)算裝置上的ActiveX控件或Java Applet的模式,采用了本地應(yīng)用根據(jù)web應(yīng)用的需求來驅(qū)動(dòng)web應(yīng)用在web瀏覽器中的HTML文檔對(duì)象模型(DOM)的方式來實(shí)現(xiàn)web應(yīng)用和本地應(yīng)用的交互,從而突破了傳統(tǒng)模式所帶來的局限。
文檔編號(hào)G06F17/30GK101488143SQ20081030010
公開日2009年7月22日 申請(qǐng)日期2008年1月16日 優(yōu)先權(quán)日2008年1月16日
發(fā)明者萬蘇婧 申請(qǐng)人:重慶安軟信息科技有限公司