專利名稱:Wes7環(huán)境中不同web窗口頁面間的通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種WES7操作系統(tǒng)中的通訊方法,特別是涉及一種WES7環(huán)境中不同WEB窗口頁面間的通信方法。
背景技術(shù):
在Windows Embed Standard 7 (簡(jiǎn)稱WES7)操作系統(tǒng)環(huán)境中,位于不同WEB窗口的頁面之間如何有效通信,到目前為止,一直沒有現(xiàn)成的技術(shù)方案可用。因?yàn)榻K端設(shè)備中的瀏覽器不受WEB業(yè)務(wù)開發(fā)商的控制,所以通常情況下,WEB業(yè)務(wù)開發(fā)商都是基于單WEB窗口進(jìn)行WEB業(yè)務(wù)和應(yīng)用的設(shè)計(jì)和開發(fā),這在一般情況下可以滿足業(yè)務(wù)需求,但并不總能滿足業(yè)務(wù)需求。例如“在頁面內(nèi)嵌非FlashPlayer類型播放器視頻窗口上放置頻道列表界面”這樣的需求,就是單WEB窗口方式無法解決的,這是因?yàn)槟壳皼]有WEB理論和相關(guān)技術(shù)支持普通WEB元素可以覆蓋在頁面插件內(nèi)建的窗口之上。這時(shí)若采用兩個(gè)WEB窗口,一個(gè)作為播放頁面窗口,另一個(gè)作為頻道列表窗口并控制好窗口尺寸和顯示層次關(guān)系,就可以很好的解決顯示覆蓋問題。而這種方案下需要解決的關(guān)鍵問題就是WEB窗口之間如何進(jìn)行數(shù)據(jù)通信以實(shí)現(xiàn)WEB頁面之間的統(tǒng)一調(diào)度。目前,尚未發(fā)現(xiàn)可用于解決多窗口 WEB頁面之間通信的技術(shù)和成功案例,無法有效的解決這一問題。
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有技術(shù)不足,提出一種WES7環(huán)境中不同WEB窗口頁面間的通信方法,可以實(shí)現(xiàn)兩個(gè)獨(dú)立的瀏覽器窗口頁面之間的雙向通訊和控制,從而突破了頁面數(shù)據(jù)通訊和控制能力只能局限在瀏覽器窗口內(nèi)的限制。本發(fā)明所采用的技術(shù)方案
一種WES7環(huán)境中不同WEB窗口頁面間的通信方法,采用ActiveX插件作為WEB窗口頁面間通信中介實(shí)現(xiàn)頁面通信功能,為WEB頁面間數(shù)據(jù)通信提供支撐
DWEB窗口加載通信頁面時(shí),各頁面同時(shí)加載ActiveX插件,并告訴ActiveX插件該加載通信頁面對(duì)應(yīng)的標(biāo)識(shí);
2)頁面I將頁面2的標(biāo)識(shí)及要發(fā)送的數(shù)據(jù)通過ActiveX插件開放的發(fā)送數(shù)據(jù)接口傳遞給頁面I中的ActiveX插件,ActiveX插件通過查找頁面與ActiveX插件通信窗口句柄映射表,找到頁面2對(duì)應(yīng)的ActiveX插件通信窗口句柄,然后以消息通知的方式將頁面I要發(fā)送數(shù)據(jù)的位置告訴頁面2的AcitveX插件;
3)頁面2的ActiveX插件收到消息后,根據(jù)消息中傳遞的數(shù)據(jù)位置提取數(shù)據(jù),然后調(diào)用自身的事件通知接口,將數(shù)據(jù)上報(bào)給頁面2的事件處理程序(通常是Javascript事件處理函數(shù)),頁面2上的事件處理程序完成數(shù)據(jù)處理;
4)頁面2至頁面I的反向通信過程按照同樣的步驟進(jìn)行;這樣,就完成了兩個(gè)不同WEB窗口頁面間的數(shù)據(jù)通信過程。所述的WES7環(huán)境中不同WEB窗口頁面間的通信方法,各ActiveX插件進(jìn)程實(shí)例讀寫的同一塊內(nèi)存中記錄了所有被加載的ActiveX插件的通信窗口句柄及其分別對(duì)應(yīng)的頁面標(biāo)識(shí),即該塊內(nèi)存中保存了頁面與ActiveX插件通信窗口句柄映射表。所述的WES7環(huán)境中不同WEB窗口頁面間的通信方法,當(dāng)頁面被銷毀時(shí),插件同時(shí)被銷毀,銷毀前會(huì)從內(nèi)存中刪除本插件的頁面標(biāo)識(shí)與ActiveX插件通信窗口句柄映射表。所述的WES7環(huán)境中不同WEB窗口頁面間的通信方法,多個(gè)WEB窗口之間的互相通信,按照前述兩個(gè)不同WEB窗口頁面間的數(shù)據(jù)通信過程進(jìn)行。本發(fā)明為使用IE瀏覽器控件編寫的WEB業(yè)務(wù)客戶端軟件提供了多WEB窗口頁面間通信的解決方案,本方案中所述WEB窗口是指內(nèi)嵌IE瀏覽器控件的窗口。本發(fā)明的有益積極效果1、本發(fā)明WES7環(huán)境中不同WEB窗口頁面間的通信方法,解決了 WES7環(huán)境中位于不同WEB窗口內(nèi)的頁面間無法通信的問題。為使用IE瀏覽器控件編寫的WEB業(yè)務(wù)客戶端軟件提供了多WEB窗口頁面間通信的解決方案,可以實(shí)現(xiàn)兩個(gè)獨(dú)立的瀏覽器窗口頁面之間的雙向通訊和控制,從而突破了頁面數(shù)據(jù)通訊和控制能力只能局限在瀏覽器窗口內(nèi)的限制。通過滿足WEB窗口間通信需求,增強(qiáng)了 WEB頁面能力,豐富了 WEB業(yè)務(wù)體驗(yàn)。2、本發(fā)明WES7環(huán)境中不同WEB窗口頁面間的通信方法,由于采用數(shù)據(jù)到來事件觸發(fā)機(jī)制,接收數(shù)據(jù)頁面只需綁定一個(gè)事件處理函數(shù)即可在有數(shù)據(jù)到來時(shí)及時(shí)處理數(shù)據(jù),而無需循環(huán)或定時(shí)檢測(cè)和等待可能到來的數(shù)據(jù)。性能好,處理數(shù)據(jù)及時(shí)。3、采用本發(fā)明WES7環(huán)境中不同WEB窗口頁面間的通信方法,擴(kuò)展性好。不僅可以實(shí)現(xiàn)兩個(gè)頁面間的通信,也可以實(shí)現(xiàn)多個(gè)頁面間通信,多頁間通信無混亂。
圖1 :本發(fā)明WES7環(huán)境中不同WEB窗口頁面間通信流程示意 圖2 :本發(fā)明WES7環(huán)境中不同WEB窗口頁面間通信方法頁面關(guān)閉時(shí)插件銷毀流程。
具體實(shí)施例方式實(shí)施例一參見圖1、圖2,本發(fā)明WES7環(huán)境中不同WEB窗口頁面間的通信方法,采用ActiveX插件作為WEB窗口頁面間通信中介實(shí)現(xiàn)頁面通信功能,為WEB頁面間數(shù)據(jù)通信提供支撐
DWEB窗口加載通信頁面時(shí),各頁面同時(shí)加載ActiveX插件,并告訴ActiveX插件該加載通信頁面對(duì)應(yīng)的標(biāo)識(shí);
2)頁面I將頁面2的標(biāo)識(shí)及要發(fā)送的數(shù)據(jù)通過ActiveX插件開放的發(fā)送數(shù)據(jù)接口傳遞給頁面I中的ActiveX插件,ActiveX插件通過查找頁面與ActiveX插件通信窗口句柄映射表,找到頁面2對(duì)應(yīng)的ActiveX插件通信窗口句柄,然后以消息通知的方式將頁面I要發(fā)送數(shù)據(jù)的位置告訴頁面2的AcitveX插件;
3)頁面2的ActiveX插件收到消息后,根據(jù)消息中傳遞的數(shù)據(jù)位置提取數(shù)據(jù),然后調(diào)用自身的事件通知接口,將數(shù)據(jù)上報(bào)給頁面2的事件處理程序(通常是Javascript事件處理函數(shù)),頁面2上的事件處理程序完成數(shù)據(jù)處理;
4)頁面2至頁面I的反向通信過程按照同樣的步驟進(jìn)行;這樣,就完成了兩個(gè)不同WEB窗口頁面間的數(shù)據(jù)通信過程。
實(shí)施例二 參見圖1、圖2,本發(fā)明WES7環(huán)境中不同WEB窗口頁面間的通信方法,與實(shí)施例一稍有不同的是,各ActiveX插件進(jìn)程實(shí)例讀寫的同一塊內(nèi)存中記錄了所有被加載的ActiveX插件的通信窗口句柄及其分別對(duì)應(yīng)的頁面標(biāo)識(shí),即該塊內(nèi)存中保存了頁面與ActiveX插件通信窗口句柄映射表。當(dāng)頁面被銷毀時(shí),插件同時(shí)被銷毀,銷毀前會(huì)從內(nèi)存中刪除本插件的頁面標(biāo)識(shí)與ActiveX插件通信窗口句柄映射表。實(shí)施例三參見圖1、圖2,本發(fā)明WES7環(huán)境中不同WEB窗口頁面間的通信方法,與實(shí)施例一或?qū)嵤├杂胁煌氖牵瑢?duì)于多個(gè)WEB窗口之間的互相通信,按照前述兩個(gè)不同WEB窗口頁面間的數(shù)據(jù)通信過程進(jìn)行。本發(fā)明采用的技術(shù)原理是基于微軟提供的IE瀏覽器控件和ActiveX插件技術(shù)。微軟提供了 IE瀏覽器控件(控件名稱WebBrowser)供應(yīng)用開發(fā)人員開發(fā)自己的WEB業(yè)務(wù)客戶端軟件,這樣WEB客戶端軟件中的WEB窗口就相當(dāng)于一個(gè)一個(gè)的IE瀏覽器。微軟提供的ActiveX插件可以像普通程序一樣自由訪問和控制操作操作系統(tǒng)本地資源,利用了該技術(shù)編寫的ActiveX插件可被IE瀏覽器中的頁面在需要時(shí)加載進(jìn)IE瀏覽器進(jìn)程中供頁面調(diào)用,從而擴(kuò)展頁面能力?;谏鲜黾夹g(shù)原理,本專利采用編寫專門ActiveX插件作為WEB窗口頁面間通信中介實(shí)現(xiàn)頁面通信功能。Windows ActiveX插件實(shí)現(xiàn)原理及其內(nèi)部機(jī)制說明
l.Windows ActiveX插件提供了容器調(diào)用插件功能和插件回調(diào)容器功能的編程技術(shù)。利用該技術(shù),插件可以將其功能通過開放API接口方式提供給外部容器窗口使用,容器窗口調(diào)用插件API并傳遞相關(guān)參數(shù)使用插件功能;插件也可以通過開放事件接口,由容器將插件事件與容器中負(fù)責(zé)處理該事件的事件處理函數(shù)進(jìn)行綁定,從而實(shí)現(xiàn)插件回調(diào)外部容器函數(shù)的目的(反過來說,就是容器可以響應(yīng)并處理插件中產(chǎn)生的事件)。事件可將插件內(nèi)部數(shù)據(jù)作為事件參數(shù)傳遞給容器的事件處理函數(shù)。2. Windows ActiveX插件一旦在系統(tǒng)中注冊(cè)后,各容器程序均可以通過該插件的CLSID標(biāo)識(shí),加載和實(shí)例化插件。不同進(jìn)程的多個(gè)插件實(shí)例其內(nèi)存空間相互隔離,不能互相訪問。同一進(jìn)程的多個(gè)插件實(shí)例處于同一進(jìn)程內(nèi)存空間,但WINDOWS并沒有提供AcitveX插件間直接訪問其內(nèi)部數(shù)據(jù)的技術(shù)。3.在頁面中使用activeX插件的場(chǎng)景下,頁面就是ActiveX插件的容器。本專利插件功能及關(guān)鍵技術(shù)原理
功能單個(gè)進(jìn)程的多個(gè)IE窗口頁面間通信;
基本接口 插件需向頁面開放的基本的API接口 setName (name):告訴插件實(shí)例其所在頁面名稱,并記錄到映射表中;sendData (name, data):頁面之間通信接口。頁面通過調(diào)用該接口,告訴插件,要通信的頁面名稱及數(shù)據(jù);
newDataMsg(data):新數(shù)據(jù)到來消息,用于頁面接收數(shù)據(jù)使用。頁面可將該接口按照普通JS事件綁定方式綁定javascript的數(shù)據(jù)處理函數(shù)。關(guān)鍵技術(shù)
本專利插件采用VC+MFC進(jìn)行實(shí)現(xiàn),并使用VC的ActiveX開發(fā)向?qū)нM(jìn)行開發(fā),故下面涉及代碼的地方均使用VC+MFC進(jìn)行描述。1.插件實(shí)例之間如何共享插件通信用到的窗口句柄與插件名稱映射表(以下簡(jiǎn)稱映射表)?
實(shí)現(xiàn)原理利用C++語言靜態(tài)變量具有在進(jìn)程空間中全局有效的存儲(chǔ)特征,我們使用在插件中使用靜態(tài)變量來保存映射表,我們稱之為靜態(tài)映射表變量,定義語句為StaticCMapStringToOb s_mapNameToHwnd;。這樣,各插件實(shí)例訪問的就是同一塊映射表內(nèi)存空間了。2.插件實(shí)例之間如何標(biāo)識(shí)自己和找到對(duì)方?
實(shí)現(xiàn)原理s_mapNameToHwnd中記錄了每個(gè)插件實(shí)例通信窗口的句柄與插件名稱的映射關(guān)系,插件通信窗口句柄就是插件實(shí)例的標(biāo)識(shí),插件通過向該窗口句柄發(fā)送和接收消息來實(shí)現(xiàn)插件實(shí)例間的通信。通過插件給頁面開放API接口 setName的方式,讓頁面通過調(diào)用setName來告訴插件實(shí)例其所在頁面名稱,插件內(nèi)部將該名稱及插件實(shí)例內(nèi)部通信窗口句柄保存到上述靜態(tài)映射表變量SjmpNameToHwnd中。當(dāng)sendData接口被調(diào)用時(shí),插件實(shí)例會(huì)根據(jù)接口中傳遞的name參數(shù)遍歷映射表TbZzfe :找到name對(duì)應(yīng)的窗口句柄后,就可以向該窗口發(fā)送/消息了。當(dāng)頁面窗口被關(guān)閉時(shí),插件實(shí)例的析構(gòu)函數(shù)會(huì)從靜態(tài)映射表變量s_mapNameToHwnd中刪除本插件實(shí)例的標(biāo)識(shí)。3.插件實(shí)例之間發(fā)送和接收數(shù)據(jù)的實(shí)現(xiàn)原理
由于多個(gè)插件實(shí)例處于同一個(gè)進(jìn)程內(nèi)存空間,因此,當(dāng)一個(gè)插件實(shí)例(簡(jiǎn)稱實(shí)例I)發(fā)送數(shù)據(jù)給另一個(gè)插件實(shí)例(簡(jiǎn)稱實(shí)例2)時(shí),實(shí)例I只需將自身存儲(chǔ)待發(fā)送數(shù)據(jù)的內(nèi)存區(qū)的起始地址和數(shù)據(jù)長(zhǎng)度(單位字節(jié))作為自定義WINDOWS消息(本插件實(shí)例采用的自定義消息:汝WM_SEND_NEW_DATA層洛£7"州)的參數(shù)發(fā)給實(shí)例2的通信窗口即可。由于WINDOWS消息允許攜帶兩個(gè)整型參數(shù),因此,可將發(fā)送數(shù)據(jù)存儲(chǔ)區(qū)起始地址作為第一個(gè)參數(shù),將發(fā)送數(shù)據(jù)長(zhǎng)度作為第二個(gè)參數(shù)。插件內(nèi)部定義了通 信窗口對(duì)應(yīng)的WM_SEND_NEW_DATA消息的處理函數(shù)。當(dāng)實(shí)例2通信窗口收到實(shí)例I Ik規(guī)WM_SEND_NEW_DATA消息后,根據(jù)其中攜帶的數(shù)據(jù)存儲(chǔ)區(qū)起始地址和數(shù)據(jù)長(zhǎng)度將數(shù)據(jù)提取出來,然后通過WINDOWS ActiveX標(biāo)準(zhǔn)上報(bào)機(jī)制將數(shù)據(jù)上報(bào)給實(shí)例2所在頁面即可。
權(quán)利要求
1.一種WES7環(huán)境中不同WEB窗口頁面間的通信方法,采用ActiveX插件作為WEB窗口頁面間通信中介實(shí)現(xiàn)頁面通信功能,為WEB頁面間數(shù)據(jù)通信提供支撐,其特征是 DWEB窗口加載通信頁面時(shí),各頁面同時(shí)加載ActiveX插件,并告訴ActiveX插件該加載通信頁面對(duì)應(yīng)的標(biāo)識(shí); 2)頁面I將頁面2的標(biāo)識(shí)及要發(fā)送的數(shù)據(jù)通過ActiveX插件開放的發(fā)送數(shù)據(jù)接口傳遞給頁面I中的ActiveX插件,ActiveX插件通過查找頁面與ActiveX插件通信窗口句柄映射表,找到頁面2對(duì)應(yīng)的ActiveX插件通信窗口句柄,然后以消息通知的方式將頁面I要發(fā)送數(shù)據(jù)的位置告訴頁面2的AcitveX插件; 3)頁面2的ActiveX插件收到消息后,根據(jù)消息中傳遞的數(shù)據(jù)位置提取數(shù)據(jù),然后調(diào)用自身的事件通知接口,將數(shù)據(jù)上報(bào)給頁面2的事件處理程序,頁面2上的事件處理程序完成數(shù)據(jù)處理; 4)頁面2至頁面I的反向通信過程按照同樣的步驟進(jìn)行;這樣,就完成了兩個(gè)不同WEB窗口頁面間的數(shù)據(jù)通信過程。
2.根據(jù)權(quán)利要求1所述的WES7環(huán)境中不同WEB窗口頁面間的通信方法,其特征是各ActiveX插件進(jìn)程實(shí)例讀寫的同一塊內(nèi)存中記錄了所有被加載的ActiveX插件的通信窗口句柄及其分別對(duì)應(yīng)的頁面標(biāo)識(shí),即該塊內(nèi)存中保存了頁面與ActiveX插件通信窗口句柄映射表。
3.根據(jù)權(quán)利要求2所述的WES7環(huán)境中不同WEB窗口頁面間的通信方法,其特征是當(dāng)頁面被銷毀時(shí),插件同時(shí)被銷毀,銷毀前會(huì)從內(nèi)存中刪除本插件的頁面標(biāo)識(shí)與ActiveX插件通信窗口句柄映射表。
4.根據(jù)權(quán)利要求1、2或3所述的WES7環(huán)境中不同WEB窗口頁面間的通信方法,其特征是=SfWEB窗口之間的互相通信,按照前述兩個(gè)不同WEB窗口頁面間的數(shù)據(jù)通信過程進(jìn)行。
全文摘要
一種WES7環(huán)境中不同WEB窗口頁面間的通信方法,采用ActiveX插件作為WEB窗口頁面間通信中介實(shí)現(xiàn)頁面通信功能,1)WEB窗口加載通信頁面時(shí),各頁面同時(shí)加載ActiveX插件;2)頁面1將頁面2的標(biāo)識(shí)及要發(fā)送的數(shù)據(jù)通過ActiveX插件開放的發(fā)送數(shù)據(jù)接口傳遞給頁面1中的ActiveX插件,ActiveX插件通過查找頁面與ActiveX插件通信窗口句柄映射表,找到頁面2對(duì)應(yīng)的ActiveX插件通信窗口句柄,然后以消息通知的方式將頁面1要發(fā)送數(shù)據(jù)的位置告訴頁面2的AcitveX插件;3)頁面2的ActiveX插件收到消息后,根據(jù)消息中傳遞的數(shù)據(jù)位置提取數(shù)據(jù),然后調(diào)用自身的事件通知接口,將數(shù)據(jù)上報(bào)給頁面2的事件處理程序;4)頁面2至頁面1的反向通信過程按照同樣的步驟進(jìn)行。
文檔編號(hào)G06F9/54GK103064747SQ20121053869
公開日2013年4月24日 申請(qǐng)日期2012年12月13日 優(yōu)先權(quán)日2012年12月13日
發(fā)明者賈小波, 張永強(qiáng), 趙付強(qiáng), 連毅, 徐圓圓, 劉飛 申請(qǐng)人:鄭州威科姆科技股份有限公司