本發(fā)明涉及一種基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互方法和裝置,屬于互聯(lián)網(wǎng)技術(shù)領(lǐng)域。
背景技術(shù):
URL Protocol協(xié)議又稱(chēng)瀏覽器協(xié)議,是瀏覽器通用的一種協(xié)議,通常被用于一些外部應(yīng)用的調(diào)用,比如:迅雷下載、調(diào)用阿里旺旺或QQ進(jìn)行客戶(hù)服務(wù)等。由于瀏覽器協(xié)議只能是單向一次性交互,只能一次性調(diào)用應(yīng)用程序,且無(wú)返回值,調(diào)用后頁(yè)面無(wú)法與外部應(yīng)用進(jìn)行交互,所以一直以來(lái)只是做一些簡(jiǎn)單的應(yīng)用。
控件是對(duì)數(shù)據(jù)和方法的封裝,擁有自己的屬性和方法,屬性是控件數(shù)據(jù)的簡(jiǎn)單訪(fǎng)問(wèn)者,方法則是控件的一些簡(jiǎn)單而可見(jiàn)的功能。由于web應(yīng)用的多樣性,很多應(yīng)用要與系統(tǒng)進(jìn)行交互,例如:發(fā)卡器要跟USB通訊、安全支付需要掃描系統(tǒng)環(huán)境等。這部分功能瀏覽器上是沒(méi)有權(quán)限去完成的,必須使用控件的方式。目前瀏覽器是百家爭(zhēng)鳴的時(shí)期,每種瀏覽器使用各自的開(kāi)發(fā)語(yǔ)言進(jìn)行控件開(kāi)發(fā)。由于瀏覽器開(kāi)發(fā)及語(yǔ)言方案不同,開(kāi)發(fā)者不得不學(xué)習(xí)各種瀏覽器的開(kāi)發(fā)語(yǔ)言,而且要分別調(diào)試,大大降低了開(kāi)發(fā)效率。此外,不同瀏覽器運(yùn)行環(huán)境不同,即使內(nèi)核相同也需要分開(kāi)進(jìn)行打包安裝,甚至部分瀏覽器要求進(jìn)入插件商店進(jìn)行審核,大大降低了發(fā)布效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明目的在于解決瀏覽器使用不同開(kāi)發(fā)語(yǔ)言進(jìn)行控件開(kāi)發(fā),同一控件在不同瀏覽器上不能同時(shí)使用問(wèn)題,提供一種基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互方法和裝置。
現(xiàn)階段,瀏覽器工具主要包括Trident內(nèi)核、Gecko內(nèi)核、WebKit內(nèi)核、Presto內(nèi)核四種類(lèi)型瀏覽器,不同用戶(hù)終端安裝有相同或不同的瀏覽器工具,本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下:一種基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互方法,所述方法包括:
步驟1、所述用戶(hù)終端瀏覽器根據(jù)瀏覽器協(xié)議利用JavaScript模塊執(zhí)行調(diào)用本地應(yīng)用程序命令;
步驟2、本地應(yīng)用程序創(chuàng)建Webserver,通過(guò)JavaScript與Webserver進(jìn)行本地模擬交互;
步驟3、調(diào)用公共服務(wù)器的JavaScript腳本文件,動(dòng)態(tài)添加JavaScript腳本文件,進(jìn)一步利用DOM中的JavaScript模塊進(jìn)行跨域數(shù)據(jù)發(fā)送,單次發(fā)送數(shù)據(jù)的大小不超過(guò)2KB;進(jìn)一步使用Get類(lèi)請(qǐng)求找到頭文件;使用Create語(yǔ)句創(chuàng)建一個(gè)JavaScript對(duì)象;
步驟4、數(shù)據(jù)發(fā)送完成后,在Webserver端控件設(shè)置JavaScript回調(diào)函數(shù),進(jìn)一步載入JavaScript回調(diào)指令進(jìn)行數(shù)據(jù)回調(diào);進(jìn)一步包括利用不可重入函數(shù)防止數(shù)據(jù)重入;
步驟5、回調(diào)完成后數(shù)據(jù)儲(chǔ)存至JavaScript中,刪掉回調(diào)引用,將JavaScript文件中的變量賦值,直接在回調(diào)中使用該變量實(shí)現(xiàn)數(shù)據(jù)返回。
一種基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互裝置,包括:
應(yīng)用調(diào)用模塊,用于調(diào)用本地應(yīng)用程序;
模擬交互模塊,用于本地應(yīng)用程序創(chuàng)建Webserver,并通過(guò)JavaScript進(jìn)行本地模擬交互;
跨域數(shù)據(jù)發(fā)送模塊,用于利用DOM中的JavaScript模塊進(jìn)行跨域數(shù)據(jù)發(fā)送;
回調(diào)模塊、用于對(duì)返回?cái)?shù)據(jù)進(jìn)行回調(diào)。
進(jìn)一步,包括數(shù)據(jù)重入禁止模塊,用于防止數(shù)據(jù)重入。
進(jìn)一步,包括數(shù)據(jù)取出模塊,用于取出返回的數(shù)據(jù)變量。
進(jìn)一步,跨域數(shù)據(jù)發(fā)送模塊單次發(fā)送數(shù)據(jù)的大小不超過(guò)2KB。
進(jìn)一步,該裝置至少包括Trident內(nèi)核、Gecko內(nèi)核、WebKit內(nèi)核、Presto內(nèi)核類(lèi)型瀏覽器中的一種。
本發(fā)明的有益效果是:無(wú)需針對(duì)不同瀏覽器開(kāi)發(fā)不同控件,能夠解決控件跨瀏覽器使用問(wèn)題,實(shí)現(xiàn)數(shù)據(jù)跨瀏覽器交互,提高了開(kāi)發(fā)效率。
附圖說(shuō)明
圖1為基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互方法示意圖;
圖2為跨域數(shù)據(jù)傳輸部分代碼舉例;
圖3為返回?cái)?shù)據(jù)回調(diào)部分代碼舉例;
圖4為基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互裝置結(jié)構(gòu)示意圖;
圖5為常見(jiàn)瀏覽器HTTP Get請(qǐng)求URL的最大長(zhǎng)度列表。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
實(shí)施例1:
圖1為本發(fā)明第一實(shí)施例中基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互方法示意圖,一種可以實(shí)現(xiàn)跨瀏覽器使用的控件解決方案。
具體而言,一種基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互方法,包括:
步驟1、所述用戶(hù)終端瀏覽器根據(jù)瀏覽器協(xié)議利用JavaScript模塊執(zhí)行調(diào)用本地應(yīng)用程序命令;
步驟2、本地應(yīng)用程序創(chuàng)建Webserver,通過(guò)JavaScript與Webserver進(jìn)行本地模擬交互;
步驟3、調(diào)用公共服務(wù)器的JavaScript腳本文件,動(dòng)態(tài)添加JavaScript腳本文件,進(jìn)一步利用DOM中的JavaScript模塊進(jìn)行跨域數(shù)據(jù)發(fā)送,單次發(fā)送數(shù)據(jù)的大小不超過(guò)2KB;進(jìn)一步使用Get類(lèi)請(qǐng)求找到頭文件;使用Create語(yǔ)句創(chuàng)建一個(gè)JavaScript對(duì)象;
步驟4、數(shù)據(jù)發(fā)送完成后,在Webserver端控件設(shè)置JavaScript回調(diào)函數(shù),進(jìn)一步載入JavaScript回調(diào)指令進(jìn)行數(shù)據(jù)回調(diào);進(jìn)一步包括利用不可重入函數(shù)防止數(shù)據(jù)重入;
步驟5、回調(diào)完成后數(shù)據(jù)儲(chǔ)存至JavaScript中,刪掉回調(diào)引用,將JavaScript文件中的變量賦值,直接在回調(diào)中使用該變量實(shí)現(xiàn)數(shù)據(jù)返回。
本發(fā)明采用上述方案,可以實(shí)現(xiàn)JavaScript與Webserver進(jìn)行本地模擬交互,通過(guò)DOM中的JavaScript模塊,能夠?qū)崿F(xiàn)數(shù)據(jù)的本地和跨域傳輸,進(jìn)一步借助回調(diào)函數(shù)進(jìn)行數(shù)據(jù)回調(diào),不可重入函數(shù)防止數(shù)據(jù)重入。
實(shí)施例2:
如圖2所示,其中跨域數(shù)據(jù)傳輸涉及的代碼字段舉例如下:
“//找到文檔頭
var head=document.getElementsByTagName('head')[0];
//生成一個(gè)JS對(duì)象
var jscript=document.createElement('script');
jscript.type='text/javascript';
//發(fā)送數(shù)據(jù)
jscript.src="http://127.0.0.1:"+jlink_port+"/"+"發(fā)送的數(shù)據(jù)";
//插入元素(兼容IE6必須insertBefore)
head.insertBefore(jscript,head.firstChild);”
實(shí)施例3:
如圖3所示,其中數(shù)據(jù)回調(diào)與防止重入代碼舉例如下:
實(shí)施例:4:
如圖4所示,與上述方法對(duì)應(yīng),本發(fā)明還提供一種基于瀏覽器協(xié)議的跨瀏覽器數(shù)據(jù)交互裝置1,包括:
應(yīng)用調(diào)用模塊101,用于調(diào)用本地應(yīng)用程序;
模擬交互模塊102,用于本地應(yīng)用程序創(chuàng)建Webserver,并通過(guò)JavaScript進(jìn)行本地模擬交互;
跨域數(shù)據(jù)發(fā)送模塊103,用于利用DOM中的JavaScript模塊進(jìn)行跨域數(shù)據(jù)發(fā)送;
回調(diào)模塊105、用于對(duì)返回?cái)?shù)據(jù)進(jìn)行回調(diào)。
數(shù)據(jù)重入禁止模塊104,用于防止數(shù)據(jù)重入。
數(shù)據(jù)取出模塊106,用于取出返回的數(shù)據(jù)變量。
該裝置進(jìn)一步至少包括Trident內(nèi)核、Gecko內(nèi)核、WebKit內(nèi)核、Presto內(nèi)核類(lèi)型瀏覽器中的一種。
實(shí)施例5:
如圖5所示,常見(jiàn)瀏覽器HTTP Get請(qǐng)求URL的最大長(zhǎng)度,其中:
IE6.0:URL最大長(zhǎng)度2083個(gè)字符,超過(guò)最大長(zhǎng)度后無(wú)法提交。
IE7.0:URL最大長(zhǎng)度2083個(gè)字符,超過(guò)最大長(zhǎng)度后仍然能提交,但是只能傳過(guò)去2083個(gè)字符。
Firefox 3.0.3:URL最大長(zhǎng)度7764個(gè)字符,超過(guò)最大長(zhǎng)度后無(wú)法提交。
Opera 9.52:URL最大長(zhǎng)度7648個(gè)字符,超過(guò)最大長(zhǎng)度后無(wú)法提交。
Google Chrome 2.0.168:URL最大長(zhǎng)度7713個(gè)字符,超過(guò)最大長(zhǎng)度后無(wú)法提交。
由于使用的Get類(lèi)請(qǐng)求,提交的數(shù)據(jù)受URL長(zhǎng)度限制,當(dāng)遞交數(shù)據(jù)控制在2K以?xún)?nèi),具體而言數(shù)據(jù)需控制在市面所用瀏覽器URL最大長(zhǎng)度值最小的那一個(gè)范圍內(nèi),從而滿(mǎn)足控件數(shù)據(jù)跨瀏覽器交互的數(shù)據(jù)量。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。