專利名稱:一種瀏覽器頁面間通信的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種瀏覽器頁面間通信的方法。
背景技術(shù):
瀏覽器頁面間通信是指瀏覽器訪問的兩個(gè)Web頁面中的JavMcript程序之間進(jìn)行數(shù)據(jù)傳遞或事件提交的過程。目前瀏覽器訪問的兩個(gè)Web頁面中的程序進(jìn)行通信,都需要Web服務(wù)器的參與,通過Ajax技術(shù)一個(gè)頁面將數(shù)據(jù)傳遞給Web服務(wù)器,在由Web服務(wù)器去服務(wù)器獲取該數(shù)據(jù)。受限與Web服務(wù)和網(wǎng)絡(luò)性能,通信的實(shí)時(shí)性較低,通信數(shù)據(jù)量較??; 同時(shí)通信的形式受限于服務(wù)器是否提供服務(wù)。通過Ajax技術(shù)實(shí)現(xiàn)頁面對(duì)服務(wù)器傳遞的數(shù)據(jù)接收,由于服務(wù)器沒有向?yàn)g覽器推送數(shù)據(jù)的能力,只能頁面不斷的向?yàn)g覽器發(fā)送請(qǐng)求,才能從服務(wù)器獲取相關(guān)數(shù)據(jù),這樣頁面就需要不斷的向服務(wù)器輪訓(xùn)發(fā)送請(qǐng)求,以獲取其他頁面向本頁面?zhèn)鬟f數(shù)據(jù)。這種輪訓(xùn)的機(jī)制,不僅實(shí)時(shí)性差,而且對(duì)本地系統(tǒng)具有一定的資源消耗。受限于服務(wù)和網(wǎng)絡(luò),在需要兩個(gè)頁面間進(jìn)行實(shí)時(shí)性較高的通信時(shí),通過傳統(tǒng)的 Ajax技術(shù)性能是有限的。而且傳統(tǒng)的技術(shù)必須在有網(wǎng)絡(luò)的情況下才能夠通信,在脫機(jī)狀態(tài)下頁面之間就無法實(shí)現(xiàn)通信。在數(shù)據(jù)量較大時(shí),也很難保證數(shù)據(jù)的實(shí)時(shí)性。
發(fā)明內(nèi)容
針對(duì)以上原因,本發(fā)明的主要目的在于提出一種新的瀏覽器不同頁面間 JavaScript函數(shù)實(shí)現(xiàn)相互通信的一種方法,通過這個(gè)方法方便的實(shí)現(xiàn)了一個(gè)或多個(gè)瀏覽器頁面間的數(shù)據(jù)通信或者事件遞交,進(jìn)而可以方便的構(gòu)建基于多瀏覽器頁面協(xié)同工作的應(yīng)用系統(tǒng)。本發(fā)明的目的在于提出的瀏覽器不同頁面間JavMcript函數(shù)相互通信的一種方法,是借助瀏覽器插件與操作系統(tǒng)進(jìn)程間通信來完成,通信的發(fā)送端頁面將接收端頁面中的JavMcript函數(shù)名稱和函數(shù)參數(shù)數(shù)據(jù)傳遞給其所在瀏覽器頁面的瀏覽器插件;而發(fā)送端的瀏覽器插件再將這些數(shù)據(jù)打包成一個(gè)消息、并通過進(jìn)程間通信將該消息發(fā)送給接收端的瀏覽器頁面的瀏覽器插件;然后接收端的瀏覽器插件解析該消息,以得到指定的函數(shù)名和參數(shù)數(shù)據(jù);并根據(jù)該函數(shù)名和參數(shù)數(shù)據(jù)由接收端插件來觸發(fā)接收端瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。上述方法實(shí)現(xiàn)了在一個(gè)瀏覽器頁面觸發(fā)另一個(gè)瀏覽器頁面 JavaScript方法的執(zhí)行,即實(shí)現(xiàn)了事件遞交;同時(shí)將數(shù)據(jù)作為事件參數(shù)進(jìn)行傳遞,即實(shí)現(xiàn)了數(shù)據(jù)的傳輸。本發(fā)明的一種瀏覽器頁面間通信的方法,于該方法中通信的發(fā)送端頁面借助瀏覽器插件通過瀏覽器JavMcript引擎將數(shù)據(jù)從瀏覽器頁面?zhèn)鬟f到通信的發(fā)送端頁所在的瀏覽器程序進(jìn)程;而通信的接收端頁面借助瀏覽器插件通過瀏覽器JavMcript引擎實(shí)現(xiàn)接收頁端面進(jìn)程的獲得的數(shù)據(jù)到瀏覽器頁面JavMcript函數(shù)的調(diào)用映射;并且通信的發(fā)送端及接收端頁面所在的瀏覽器程序進(jìn)程之間是通過操作系統(tǒng)進(jìn)程間通信進(jìn)行數(shù)據(jù)傳送。
其中
發(fā)送端頁面是將JavMcript函數(shù)名稱和函數(shù)參數(shù)數(shù)據(jù)傳遞給其所在瀏覽器頁面的該瀏覽器插件;并且發(fā)送端的該瀏覽器插件再將這些數(shù)據(jù)打包成一個(gè)消息。該插件再通過操作系統(tǒng)進(jìn)程間通信技術(shù)將該消息傳遞到接收端頁面所在的瀏覽器程序進(jìn)程中;然后接收端的瀏覽器插件解析該消息,以得到指定的數(shù)據(jù);并根據(jù)該數(shù)據(jù)由接收端插件來觸發(fā)接收端瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。該瀏覽器插件包含有發(fā)送端和接收端以及進(jìn)程間通信模塊,以實(shí)現(xiàn)各頁面之間數(shù)據(jù)的相互遞交;其中,瀏覽器插件的發(fā)送端負(fù)責(zé)從頁面接收數(shù)據(jù)并將數(shù)據(jù)發(fā)送到另外一個(gè)瀏覽器頁面的瀏覽器插件接收端;瀏覽器插件接收端負(fù)責(zé)接收發(fā)送端傳來的消息并根據(jù)消息觸發(fā)瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。該進(jìn)程通信可為DBus、基于本地網(wǎng)絡(luò)的Socket通信、進(jìn)程間消息隊(duì)列或共享內(nèi)存的IPC通信。其包含發(fā)送端步驟
步驟(1),打開發(fā)送端頁面,加載瀏覽器插件;
步驟0),發(fā)送端頁面的瀏覽器插件與接收端頁面的瀏覽器插件建立進(jìn)程通信連接; 步驟(3),發(fā)送端頁面調(diào)用瀏覽器插件發(fā)送端提供的JavMcript接口函數(shù);將接收端頁面定義好的Jav必cript函數(shù)名稱和函數(shù)參數(shù)數(shù)據(jù)作為發(fā)送端提供的Jav必cript接口函數(shù)的參數(shù)進(jìn)行調(diào)用;該調(diào)用將接收端的目標(biāo)函數(shù)和目標(biāo)函數(shù)的參數(shù)全部作為數(shù)據(jù)傳遞到發(fā)送端頁面所在瀏覽器頁面的瀏覽器插件;
步驟,發(fā)送端頁面所在瀏覽器的瀏覽器插件接收到傳來的數(shù)據(jù)后,將該數(shù)據(jù)打包成通信消息;
步驟(5),發(fā)送端頁面所在瀏覽器頁面的瀏覽器插件通過步驟O)中建立的進(jìn)程通信連接,將步驟中的通信消息發(fā)送到接收端。其還包含接收端步驟
步驟(21),打開接收端頁面,加載瀏覽器插件,并于該接收端頁面中定義好被調(diào)用的 JavaScript函數(shù),以供發(fā)送端頁面調(diào)用;
步驟(22),接收端頁面的瀏覽器插件與發(fā)送端頁面的瀏覽器插件建立進(jìn)程通信連接; 步驟,頁面等待JavMcript被調(diào)用;
步驟(M),接收到消息時(shí),將消息解析成要調(diào)用的JavMcript函數(shù)名;并根據(jù)消息觸發(fā)瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。于所述步驟(24)中首先包含一個(gè)判斷步驟,判斷接收端頁面是否定義了該函數(shù), 如果結(jié)果是,則繼續(xù)進(jìn)行,如果是否,則返回步驟(23)。于步驟(5)中,首先包含一個(gè)判斷步驟,判斷步驟(2)中建立的進(jìn)程通信連接是否成功,如果成功則繼續(xù)執(zhí)行發(fā)送;否則不發(fā)送并退出。該瀏覽器插件的發(fā)送端和接收端以及進(jìn)程間通信模塊可集成在同一個(gè)插件中,只要兩個(gè)頁面都加載該插件,便可實(shí)現(xiàn)不同頁面之間程序的相互遞交。插件的發(fā)送端負(fù)責(zé)從頁面接收數(shù)據(jù)并將數(shù)據(jù)發(fā)送到另外一個(gè)瀏覽器頁面的瀏覽器插件接收端;瀏覽器插件接收端負(fù)責(zé)接收發(fā)送端傳來的消息并根據(jù)消息觸發(fā)瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。本發(fā)明中將插件的接收端功能和發(fā)送端功能集成到同一插件程序中實(shí)現(xiàn),也可以將在不同插件中分別實(shí)現(xiàn)接收端功能和發(fā)送端功能。本發(fā)明提出的方法是基于事件模型,發(fā)送端和接收端不需要進(jìn)行相互握手的請(qǐng)求和確認(rèn),所以本發(fā)明這種瀏覽器不同頁面間的JavMcript函數(shù)間的事件遞交和數(shù)據(jù)通信方法具有很高的效率以及實(shí)時(shí)性。
圖1為兩個(gè)瀏覽器頁面間通信的總體架構(gòu)圖; 圖2為兩個(gè)瀏覽器頁面間Dbus通信的總體架構(gòu)圖; 圖3為兩個(gè)瀏覽器頁面間Dbus通信的具體流程圖。
具體實(shí)施例方式為了使本發(fā)明的特征及優(yōu)點(diǎn)得到更清楚的了解,以下結(jié)合附圖,作詳細(xì)說明; 如圖1所示,于本實(shí)施例中,該瀏覽器插件的發(fā)送端和接收端以及進(jìn)程間通信模塊
集成在同一個(gè)插件中,只要兩個(gè)頁面都加載該插件,便可實(shí)現(xiàn)不同頁面之間程序的相互遞交。插件的發(fā)送端負(fù)責(zé)從頁面接收數(shù)據(jù)并將數(shù)據(jù)發(fā)送到另外一個(gè)瀏覽器頁面的瀏覽器插件接收端;瀏覽器插件接收端負(fù)責(zé)接收發(fā)送端傳來的消息并根據(jù)消息觸發(fā)瀏覽器頁面的 JavaScript函數(shù)的執(zhí)行。于本實(shí)施例中,是將插件的接收端功能和發(fā)送端功能集成到同一插件程序中實(shí)現(xiàn),本領(lǐng)域技術(shù)員可以理解的是,也可以將其設(shè)在不同插件中甚至是不同瀏覽器的不同插件中,分別實(shí)現(xiàn)接收端功能和發(fā)送端功能。由于其原理于本實(shí)施例相同,在此不予贅述。以下以進(jìn)程間通信應(yīng)用DBus通信實(shí)來現(xiàn)進(jìn)程間通信為例說明。詳細(xì)說明如下 如圖2所示,描述了本發(fā)明的瀏覽器頁面通信的流程圖。對(duì)發(fā)明專利實(shí)施方案的要求具體步驟如下所述 1、發(fā)送端步驟
1)步驟(S0),在瀏覽器中打開發(fā)送端頁面(即頁面1),加載通信插件(Si);
2)步驟(Si),插件加載并初始化,注冊(cè)DBus通信后臺(tái)服務(wù)(S2),并獲得后臺(tái)服務(wù)地址(addl),并根據(jù)發(fā)送端頁面參數(shù)向DBus管理服務(wù)程序獲取接收端瀏覽器頁面所指定的 DBus通信接收端后臺(tái)服務(wù)地址,即頁面2的Dbus通信服務(wù)地址add2 ;
3)步驟(S; ),插件加載成功后,便可在頁面1(發(fā)送端頁面)的發(fā)送端調(diào)用發(fā)送端插件提供的JavMcript接口函數(shù)invokeJSO ;將接收端頁面定義好的JavMcript函數(shù)(函
數(shù)形式如function (paral,para2,......))的函數(shù)名(如function)和函數(shù)參數(shù)(如
paral,para2,......)作為invokeJSO函數(shù)的參數(shù)進(jìn)行調(diào)用(調(diào)用形式如invokeJS( "fu
notion paral, para2,......));該調(diào)用將接收端的目標(biāo)函數(shù)的函數(shù)名作為字符串類型的
參數(shù),將目標(biāo)函數(shù)的參數(shù)全部保持原參數(shù)類型作為數(shù)據(jù)傳遞到頁面1所在瀏覽器頁面的插件;
4)步驟S4,頁面1所在瀏覽器頁面的插件接收到頁面1傳來的數(shù)據(jù)后,將數(shù)據(jù)打包成 DBus消息;
5)步驟5,頁面1所在瀏覽器頁面的插件根據(jù)步驟2中指定的DBus接收端后臺(tái)服務(wù)地址add2判斷接收端頁面(頁面2)是否開啟了 DBus服務(wù);如果開啟則發(fā)送步驟4打包的消
6息(即執(zhí)行步驟S7);如果沒有開啟則JavMcript調(diào)用結(jié)束(即執(zhí)行步驟S6)。2、接收端步驟
1)在一瀏覽器中打開另一頁面(即頁面2),并加載通信插件;該接收端瀏覽器頁面(頁
面2)中定義好被調(diào)用的Javakript函數(shù)(如function (paral,para2......)),供發(fā)送端
頁面調(diào)用;
2)插件加載并初始化,向DBus管理服務(wù)程序注冊(cè)DBus通信后臺(tái)服務(wù)地址,即頁面2的 Dbus通信服務(wù)地址add2 ;
3)頁面等待JavMcript被調(diào)用;
4)如果插件DBus通信后臺(tái)服務(wù)接收到消息(步驟S8)(如消息“function”,paral, para2……),則將消息解析成要調(diào)用的Javakript函數(shù)名(如Junction)和參數(shù)數(shù)據(jù)(如
paral, para2......)(步驟S9);插件通過JavMcript引擎,在頁面2中調(diào)用解析出的
JavaScript 函數(shù)⑶口 Junction (paral,para2......))(步驟 Sll);
另外,還可于步驟S9后面增加一個(gè)判斷步驟(S10),判斷頁面2是否定義了函數(shù) function,如果結(jié)果是,則根據(jù)函數(shù)function執(zhí)行相對(duì)應(yīng)的操作,然后返回執(zhí)行步驟S8繼續(xù)等待信息;如果是否,則返回執(zhí)行步驟S8繼續(xù)等待信息。于本具體實(shí)施例中,是以其中一個(gè)頁面(發(fā)送端頁面)與另一個(gè)頁面(接收端頁面) 通信的步驟為例說明的,當(dāng)然任意頁面之間可互為發(fā)送與接收端,均可以通過同一或不同的插件相互通信。本發(fā)明具有通用性,可以用于實(shí)現(xiàn)Linux系統(tǒng)下相同瀏覽器不同頁面的、 不同瀏覽器不同頁面間的通信
上述描述的實(shí)施過程,是應(yīng)用了 DBus作為進(jìn)程間通信的方法,通過DBus地址機(jī)制實(shí)現(xiàn)發(fā)送端和接收端的相互通信。但本發(fā)明不限于使用DBus實(shí)現(xiàn)進(jìn)程間通信,本領(lǐng)域技術(shù)人員可以理解的是也可通過基于本地網(wǎng)絡(luò)的Socket通信,進(jìn)程間消息隊(duì)列、共享內(nèi)存的IPC通信,或其它通信方式實(shí)現(xiàn)的進(jìn)程間通信,來替代本發(fā)明的DBus通信的實(shí)現(xiàn)方法,其均在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種瀏覽器頁面間通信的方法,其特征在于,于該方法中通信的發(fā)送端頁面借助瀏覽器插件通過瀏覽器JavMcript引擎將數(shù)據(jù)從瀏覽器頁面?zhèn)鬟f到通信的發(fā)送端頁所在的瀏覽器程序進(jìn)程;而通信的接收端頁面借助瀏覽器插件通過瀏覽器JavMcript引擎實(shí)現(xiàn)接收頁端面進(jìn)程的獲得的數(shù)據(jù)到瀏覽器頁面JavMcript函數(shù)的調(diào)用映射;并且通信的發(fā)送端及接收端頁面所在的瀏覽器程序進(jìn)程之間是通過操作系統(tǒng)進(jìn)程間通信進(jìn)行數(shù)據(jù)傳送。
2.如權(quán)利要求1所述的瀏覽器頁面間通信的方法,其特征在于,發(fā)送端頁面是將 JavaScript函數(shù)名稱和函數(shù)參數(shù)數(shù)據(jù)傳遞給其所在瀏覽器頁面的該瀏覽器插件;并且發(fā)送端的該瀏覽器插件再將這些數(shù)據(jù)打包成一個(gè)消息。
3.如權(quán)利要求2所述的瀏覽器頁面間通信的方法,其特征在于,該插件再通過操作系統(tǒng)進(jìn)程間通信技術(shù)將該消息傳遞到接收端頁面所在的瀏覽器程序進(jìn)程中;然后接收端的瀏覽器插件解析該消息,以得到指定的數(shù)據(jù);并根據(jù)該數(shù)據(jù)由接收端插件來觸發(fā)接收端瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。
4.如權(quán)利要求3所述的瀏覽器頁面間通信的方法,其特征在于,該瀏覽器插件包含有發(fā)送端和接收端以及進(jìn)程間通信模塊,以實(shí)現(xiàn)各頁面之間數(shù)據(jù)的相互遞交;其中,瀏覽器插件的發(fā)送端負(fù)責(zé)從頁面接收數(shù)據(jù)并將數(shù)據(jù)發(fā)送到另外一個(gè)瀏覽器頁面的瀏覽器插件接收端;瀏覽器插件接收端負(fù)責(zé)接收發(fā)送端傳來的消息并根據(jù)消息觸發(fā)瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。
5.如權(quán)利要求1-4任一權(quán)利要求所述的瀏覽器頁面間通信的方法,其特征在于,該進(jìn)程通信為DBus、基于本地網(wǎng)絡(luò)的Socket通信、進(jìn)程間消息隊(duì)列或共享內(nèi)存的IPC通信。
6.如權(quán)利要求4所述的瀏覽器頁面間通信的方法,其特征在于,其包含發(fā)送端步驟 步驟(1),打開發(fā)送端頁面,加載瀏覽器插件;步驟0),發(fā)送端頁面的瀏覽器插件與接收端頁面的瀏覽器插件建立進(jìn)程通信連接; 步驟(3),發(fā)送端頁面的調(diào)用瀏覽器插件發(fā)送端提供的JavMcript接口函數(shù);將接收端頁面定義好的JavMcript函數(shù)名稱和函數(shù)參數(shù)數(shù)據(jù)作為發(fā)送端提供的JavMcript接口函數(shù)和參數(shù)進(jìn)行調(diào)用;該調(diào)用將接收端的目標(biāo)函數(shù)和目標(biāo)函數(shù)的參數(shù)全部作為數(shù)據(jù)傳遞到發(fā)送端頁面所在瀏覽器頁面的瀏覽器插件;步驟,發(fā)送端頁面所在瀏覽器頁面的瀏覽器插件接收到傳來的數(shù)據(jù)后,將該數(shù)據(jù)打包成通信消息;步驟(5),發(fā)送端頁面所在瀏覽器頁面的瀏覽器插件通過步驟O)中建立的進(jìn)程通信連接,將步驟中的通信消息發(fā)送到接收端。
7.如權(quán)利要求6所述的瀏覽器頁面間通信的方法,其特征在于,其還包含接收端步驟 步驟,打開接收端頁面,加載瀏覽器插件,并于該接收端頁面中定義好被調(diào)用的JavaScript函數(shù),以供發(fā)送端頁面調(diào)用;步驟(22),接收端頁面的瀏覽器插件與發(fā)送端頁面的瀏覽器插件建立進(jìn)程通信連接; 步驟,頁面等待JavMcript被調(diào)用;步驟(M),接收到消息時(shí),將消息解析成要調(diào)用的JavMcript函數(shù)名;并根據(jù)消息觸發(fā)瀏覽器頁面的JavMcript函數(shù)的執(zhí)行。
8.如權(quán)利要求7所述的瀏覽器頁面間通信的方法,其特征在于,于所述步驟(24)中首先包含一個(gè)判斷步驟,判斷接收端頁面是否定義了該函數(shù),如果結(jié)果是,則繼續(xù)進(jìn)行,如果是否,則返回步驟(23)。
9.如權(quán)利要求6所述的瀏覽器頁面間通信的方法,其特征在于,于步驟(5)中,首先包含一個(gè)判斷步驟,判斷步驟O)中建立的進(jìn)程通信連接是否成功,如果成功則繼續(xù)執(zhí)行發(fā)送;否則不發(fā)送并退出。
全文摘要
本發(fā)明提出了一種瀏覽器頁面間通信的方法。于該方法中通信的發(fā)送端頁面借助瀏覽器插件通過瀏覽器JavaScript引擎將數(shù)據(jù)從瀏覽器頁面?zhèn)鬟f到通信的發(fā)送端頁面所在的瀏覽器程序進(jìn)程;而通信的接收端頁面借助瀏覽器插件通過瀏覽器JavaScript引擎實(shí)現(xiàn)接收端進(jìn)程獲得的數(shù)據(jù)到瀏覽器頁面JavaScript函數(shù)的調(diào)用映射;并且通信的發(fā)送端及接收端頁面所在的瀏覽器程序進(jìn)程之間是通過操作系統(tǒng)進(jìn)程間通信進(jìn)行數(shù)據(jù)傳送。本發(fā)明提出的方法是基于事件模型,發(fā)送端和接收端不需要進(jìn)行相互握手的請(qǐng)求和確認(rèn),所以本發(fā)明這種瀏覽器不同頁面間的JavaScript函數(shù)間的事件遞交和數(shù)據(jù)通信方法具有很高的效率以及實(shí)時(shí)性。
文檔編號(hào)G06F9/54GK102567125SQ20111044988
公開日2012年7月11日 申請(qǐng)日期2011年12月28日 優(yōu)先權(quán)日2011年12月28日
發(fā)明者蘭雨晴, 夏穎, 尹忠興, 張木梁, 董恩廣 申請(qǐng)人:中標(biāo)軟件有限公司