專利名稱:一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多標(biāo)簽應(yīng)用程序技術(shù)領(lǐng)域,特別是涉及一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程 序中進(jìn)行消息交互的方法及系統(tǒng)。
背景技術(shù):
瀏覽器是用戶訪問(wèn)互聯(lián)網(wǎng)的最常用的入口,很多情況下,用戶希望能夠同 時(shí)關(guān)注很多網(wǎng)頁(yè),但是屏幕的尺寸是有限的,于是出現(xiàn)了多標(biāo)簽瀏覽器,如圖 l所示。在這種多標(biāo)簽瀏覽器中,每個(gè)標(biāo)簽對(duì)應(yīng)于一個(gè)網(wǎng)頁(yè)。用戶可以在某一 特定時(shí)間只關(guān)注一個(gè)網(wǎng)頁(yè)的內(nèi)容,當(dāng)他想關(guān)注其他網(wǎng)頁(yè)的內(nèi)容時(shí),只需要切換 標(biāo)簽即可。
這種多標(biāo)簽瀏覽器雖然能夠?yàn)橛脩舨榭淳W(wǎng)頁(yè)提供方便,但是經(jīng)常會(huì)出現(xiàn)頁(yè) 面假死(即用戶無(wú)法操作這個(gè)網(wǎng)頁(yè),如滾動(dòng)頁(yè)面、點(diǎn)擊鏈接等)傳遞的情況。
例如,某個(gè)用戶打開了 IO個(gè)頁(yè)面,當(dāng)前頁(yè)面為sohu首頁(yè),,li殳用戶在瀏覽該 頁(yè)面時(shí),這個(gè)頁(yè)面突然發(fā)生假死,那么也無(wú)法對(duì)另外9個(gè)頁(yè)面進(jìn)行操作。此時(shí), 用戶不得不取消對(duì)另外9個(gè)頁(yè)面的瀏覽,將瀏覽器進(jìn)程結(jié)束,然后重啟瀏覽器, 再重新打開這9個(gè)頁(yè)面才可以繼續(xù)瀏覽。因此,嚴(yán)重影響了用戶的體驗(yàn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法 及系統(tǒng),能夠解決現(xiàn)有技術(shù)中當(dāng)一個(gè)頁(yè)面窗口發(fā)生假死時(shí),無(wú)法對(duì)其他頁(yè)面窗 口進(jìn)行操作的問(wèn)題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了如下方案
一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法,包括
將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口;
在所述頂層窗口中進(jìn)行用戶消息的交互。
優(yōu)選的,所述將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口包括
所述將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為所有者為空的頂層 窗口。
優(yōu)選的,所述在所述頂層窗口中進(jìn)行用戶消息的交互包括
以非阻塞的消息發(fā)送方式在所述頂層窗口中進(jìn)行用戶消息的交互。
優(yōu)選的,在所述頂層窗口中進(jìn)行用戶消息的交互包括
建立并保存所述多標(biāo)簽應(yīng)用程序的主框架窗口與所述頂層窗口的對(duì)應(yīng)關(guān)
系;
觸發(fā)所述主框架窗口將接收到的用戶消息發(fā)送到相應(yīng)的標(biāo)簽對(duì)應(yīng)的頂層 窗口 ,并觸發(fā)該頂層窗口執(zhí)行所述用戶消息對(duì)應(yīng)的操作。 優(yōu)選的,還包括
調(diào)整頂層窗口的位置及大小,以使頂層窗口與所述主框架窗口的位置及大 小相適應(yīng)。
優(yōu)選的,還包括
如果判定某標(biāo)簽對(duì)應(yīng)的頂層窗口發(fā)生假死,則向用戶發(fā)出提示信息。 優(yōu)選的,所述將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口包
括
在多標(biāo)簽應(yīng)用程序中建立新標(biāo)簽的同時(shí),將所述新標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng) 建為頂層窗口。
優(yōu)選的,所述多標(biāo)簽應(yīng)用程序包括多標(biāo)簽網(wǎng)頁(yè)瀏覽器或多標(biāo)簽文檔編輯器
或多標(biāo)簽閱讀器。
一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的系統(tǒng),包括
窗口管理i^莫塊,用于將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層
窗口;
消息交互模塊,用于在所述頂層窗口中進(jìn)行用戶消息的交互。
優(yōu)選的,所述窗口管理^t塊具體用于將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面
窗口創(chuàng)建為所有者為空的頂層窗口。
優(yōu)選的,所述消息交互模塊具體用于以非阻塞的消息發(fā)送方式在所述頂層
窗口中進(jìn)行用戶消息的交互。優(yōu)選的,所述消息交互模塊包括
對(duì)應(yīng)關(guān)系保存子模塊,用于建立并保存所述多標(biāo)簽應(yīng)用程序的主框架窗口
與所述頂層窗口的對(duì)應(yīng)關(guān)系;
通訊模塊,用于觸發(fā)所述主框架窗口將接收到的用戶消息發(fā)送到相應(yīng)的標(biāo) 簽對(duì)應(yīng)的頂層窗口 ,并觸發(fā)該頂層窗口執(zhí)行所述用戶消息對(duì)應(yīng)的操作。
優(yōu)選的,還包括
窗口調(diào)整模塊,用于調(diào)整頂層窗口的位置及大小,以使頂層窗口與所述主 框架窗口的位置及大小相匹配。 優(yōu)選的,還包括
提示模塊,用于當(dāng)某標(biāo)簽對(duì)應(yīng)的頂層窗口發(fā)生假死時(shí),向用戶發(fā)出提示信
自
優(yōu)選的,所述窗口管理模塊在多標(biāo)簽應(yīng)用程序中建立新標(biāo)簽的同時(shí),將所 述新標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口 。
優(yōu)選的,所述多標(biāo)簽應(yīng)用程序包括多標(biāo)簽網(wǎng)頁(yè)瀏覽器或多標(biāo)簽文檔編輯器 或多標(biāo)簽閱讀器。
根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開了以下技術(shù)效果 本發(fā)明通過(guò)將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為所有者置為 空的頂層窗口 ,使得每個(gè)標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口都是與多標(biāo)簽應(yīng)用程序的主框架 窗口平級(jí)的頂層窗口,在這樣的頂層窗口進(jìn)行消息交互的過(guò)程中,即4吏某個(gè)頁(yè) 面窗口發(fā)生假死,也不會(huì)使其他的頁(yè)面窗口受到影響,即可以正常對(duì)其他頁(yè)面 窗口進(jìn)行操作,不會(huì)影響整個(gè)應(yīng)用程序的正常運(yùn)行,因此提升了用戶的體驗(yàn)。
圖l是現(xiàn)有技術(shù)中的多標(biāo)簽網(wǎng)頁(yè)瀏覽器界面示意圖2是本發(fā)明實(shí)施例提供的方法的流程圖3是現(xiàn)有技術(shù)中多標(biāo)簽瀏覽器的窗口結(jié)構(gòu)示意圖4是本發(fā)明建立的多標(biāo)簽瀏覽器的窗口結(jié)構(gòu)示意圖5是本發(fā)明實(shí)施例中頁(yè)面窗口發(fā)生假死時(shí)的界面示意圖6是本發(fā)明實(shí)施例提供的系統(tǒng)的示意圖。
具體實(shí)施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
參見(jiàn)圖2,本發(fā)明實(shí)施例提供的實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方 法包括以下步驟
S201:將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口;
S202:在所述頂層窗口中進(jìn)行用戶消息的交互。
為了便于理解,下面首先簡(jiǎn)單介紹一下本發(fā)明實(shí)施例中多標(biāo)簽應(yīng)用程序、 操作系統(tǒng)中窗口、頂層窗口等相關(guān)概念。關(guān)于標(biāo)簽,請(qǐng)參見(jiàn)圖l,其為現(xiàn)有技 術(shù)中的多標(biāo)簽網(wǎng)頁(yè)瀏覽器界面示意圖。其中顯示"遨游起始頁(yè),,、"搜狐-中國(guó)...,, 以及"空白頁(yè)"的小矩形框就是各個(gè)頁(yè)面的標(biāo)簽,每個(gè)標(biāo)簽對(duì)應(yīng)了一個(gè)頁(yè)面窗 口。而所謂多標(biāo)簽應(yīng)用程序,就是將各個(gè)標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口整合在一個(gè)窗口 里展現(xiàn),點(diǎn)擊這些標(biāo)簽就可以在不同的頁(yè)面間進(jìn)行切換。例如,在圖l所示的 網(wǎng)頁(yè)瀏覽器中可以同時(shí)包括多個(gè)標(biāo)簽,因此稱為多標(biāo)簽網(wǎng)頁(yè)瀏覽器。
本發(fā)明實(shí)施例所述的多標(biāo)簽應(yīng)用程序包括但不限于多標(biāo)簽網(wǎng)頁(yè)瀏覽器、多 標(biāo)簽文檔編輯器(如excel等)以及多標(biāo)簽文檔閱讀器等等。此外,需要說(shuō)明 的是,應(yīng)用程序可以分為單進(jìn)程應(yīng)用程序和多進(jìn)程應(yīng)用程序,各個(gè)標(biāo)簽對(duì)應(yīng)的 頁(yè)面窗口可以是在一個(gè)進(jìn)程中創(chuàng)建的,也可以是在多個(gè)不同的進(jìn)程中創(chuàng)建的。
但是,無(wú)論是在一個(gè)進(jìn)程還是在多個(gè)進(jìn)程中創(chuàng)建的,都可能存在假死傳遞的問(wèn) 進(jìn)程應(yīng)用程序。
本發(fā)明實(shí)施例所述窗口是指系統(tǒng)顯示器上的一個(gè)區(qū)域,應(yīng)用程序使用窗口 來(lái)顯示輸出或接收用戶的輸入。需要說(shuō)明的是,本發(fā)明實(shí)施例中所述的"窗口" 并不局限在Windows等傳統(tǒng)意義上基于窗口類開發(fā)的操作系統(tǒng)中,即使在非 Windows操作系統(tǒng),只要在計(jì)算機(jī)界面上提供了一種人機(jī)交互的界面(比如對(duì) 話框等),都可以視為本發(fā)明實(shí)施例中所述的窗口。 一方面應(yīng)用程序通過(guò)窗口 訪問(wèn)系統(tǒng)顯示器;另 一方面應(yīng)用程序通過(guò)使用窗口與其他應(yīng)用程序共享系統(tǒng)顯 示器。同一時(shí)間只有一個(gè)窗口可以接收用戶的輸入,用戶可以通過(guò)鼠標(biāo)、鍵盤等輸入設(shè)備與窗口以及擁有該窗口的應(yīng)用程序進(jìn)行交互。
以Windows系列的才喿作系統(tǒng)為例,在Windows才喿作系統(tǒng)中(也包括其他基 于窗口類的圖形操作系統(tǒng),如蘋果機(jī)專用系統(tǒng)mac等),每個(gè)基于圖形界面的 應(yīng)用程序至少要?jiǎng)?chuàng)建一個(gè)窗口,稱為主框架窗口,這個(gè)窗口是用戶與應(yīng)用程序 之間的主要接口。許多應(yīng)用程序還會(huì)直接或間接地創(chuàng)建其他一些窗口,來(lái)完成 相關(guān)的任務(wù)。 一旦創(chuàng)建了一個(gè)窗口, Windows就能提供該窗口所對(duì)應(yīng)的各種用 戶交互信息。Windows能夠自動(dòng)完成許多用戶請(qǐng)求的任務(wù),如移動(dòng)窗口、調(diào)整 窗口大小等。在Windows環(huán)境下允許創(chuàng)建任意數(shù)目的窗口 , Windows能以各種 不同方式來(lái)顯示信息,并負(fù)責(zé)為應(yīng)用程序管理顯示屏幕、控制窗口的位置和顯 示,確保不會(huì)有兩個(gè)應(yīng)用程序在同一時(shí)刻爭(zhēng)用系統(tǒng)顯示器的同一部分。
應(yīng)用程序窗口一般由標(biāo)題欄、菜單欄、工具欄、邊框、客戶區(qū)、滾動(dòng)條等 組件構(gòu)成。窗口與窗口之間通常是樹狀連接關(guān)系,即某一個(gè)窗口可能有0個(gè)或 l個(gè)或2個(gè)以上的子窗口,而每一個(gè)子窗口只能有一個(gè)固定的父窗口。若某個(gè) 窗口的父窗口不存在或者為桌面窗口 (窗口類為#32769的窗口稱為桌面窗口 ) 時(shí),則稱這個(gè)窗口為頂層窗口。
仍然以Wi ndows操作系統(tǒng)為例,Wi ndows應(yīng)用程序的運(yùn)行需要依靠外部發(fā) 生的事件來(lái)驅(qū)動(dòng),描述事件發(fā)生的信息稱為消息(message)。例如,當(dāng)用戶按 下鍵盤的某個(gè)鍵時(shí),系統(tǒng)就會(huì)產(chǎn)生一條特定的消息,標(biāo)識(shí)鍵盤被按下事件的發(fā) 生。所謂事件驅(qū)動(dòng),是指Windows應(yīng)用程序的執(zhí)行順序取決于事件發(fā)生的順序, 事件驅(qū)動(dòng)程序設(shè)計(jì)是圍繞著消息的產(chǎn)生與處理而展開的。Windows應(yīng)用程序在 運(yùn)行時(shí)不斷獲得任何可能的輸入消息,進(jìn)行判斷,然后再做適當(dāng)?shù)奶幚怼?br>
如果把應(yīng)用程序獲得的各種消息分類,則可以分為由硬件設(shè)備產(chǎn)生的輸入 消息和來(lái)自Windows系統(tǒng)的系統(tǒng)消息。
應(yīng)用程序通過(guò)輸入消息來(lái)接受輸入,鼠標(biāo)移動(dòng)或《建盤祐j要下都將產(chǎn)生輸入 消息。Windows系統(tǒng)負(fù)責(zé)監(jiān)視所有輸入設(shè)備并將輸入消息放入一個(gè)隊(duì)列之中, 該隊(duì)列是系統(tǒng)定義的用于臨時(shí)存儲(chǔ)消息的內(nèi)存塊,稱為系統(tǒng)消息隊(duì)列。在 Windows下運(yùn)行的每個(gè)圖形界面(Graphics Device Interface, GDI)線程都 擁有自己的消息隊(duì)列。當(dāng)用戶移動(dòng)鼠標(biāo)或敲擊鍵盤時(shí),產(chǎn)生的輸入消息首先進(jìn)入系統(tǒng)消息隊(duì)列。
接著,Windows從系統(tǒng)消息隊(duì)列中每次移走一條輸入消息,確定目的窗口,并 將輸入消息送入創(chuàng)建該窗口的應(yīng)用程序的消息隊(duì)列之中。應(yīng)用程序通過(guò)應(yīng)用程 序隊(duì)列來(lái)接收輸入,它通過(guò)一個(gè)稱為消息循環(huán)的控制結(jié)構(gòu)從應(yīng)用程序隊(duì)列中檢 索消息,并將檢索到的消息發(fā)送給相應(yīng)的窗口,由該窗口的窗口函數(shù)負(fù)責(zé)對(duì)消 息進(jìn)行判斷,并進(jìn)行相應(yīng)的處理。
系統(tǒng)消息與輸入消息不同,Windows系統(tǒng)直接將它發(fā)送給有關(guān)窗口函數(shù), 而不通過(guò)系統(tǒng)消息隊(duì)列和應(yīng)用程序隊(duì)列。Windows系統(tǒng)通過(guò)這種方式直接將影 響某窗口的事件通知窗口。例如,當(dāng)用戶激活一個(gè)應(yīng)用程序窗口時(shí),Windows 系統(tǒng)就會(huì)向該窗口直接發(fā)送相應(yīng)的系統(tǒng)消息。
需要說(shuō)明的是,消息發(fā)送形式大致可以分為兩類阻塞方式(如 SendMessage等)和非阻塞方式(如PostMessage、 SendMessageTimeout等)。 以線程A向窗口 B發(fā)送消息為例,并假設(shè)窗口 B不屬于線程A(窗口 B是否屬 于線程A是由創(chuàng)建窗口時(shí)所在的線程決定的,即如果在線程A中創(chuàng)建的窗口 B, 則窗口B屬于線程A,否則,窗口B不屬于線程A),則對(duì)于不同的發(fā)送方式分 別具有以下特點(diǎn)
如果是線程A以阻塞方式向窗口 B發(fā)送一個(gè)消息M,則線程A必需等待窗 口 B處理完消息M之后才能繼續(xù)執(zhí)行;如果窗口 B在處理消息M過(guò)程中發(fā)生了 死循環(huán)、死鎖等問(wèn)題而導(dǎo)致這個(gè)處理過(guò)程無(wú)法返回(此時(shí)可以認(rèn)為窗口 B發(fā)生 了假死),那么線程A便無(wú)法繼續(xù)運(yùn)行,也無(wú)法接收并處理其他消息,此時(shí)可 以認(rèn)為是窗口 B的假死直接導(dǎo)致線程A的假死(此時(shí)線程A中所有的窗口都會(huì) 失去響應(yīng))。
如果是以非阻塞方式發(fā)送消息,則線程A在將消息發(fā)送給窗口 B之后便立 即返回,無(wú)需等待窗口 B將消息處理完(如果是采用PostMessage的方式,則 無(wú)須等待;如果是采用SendMessageTimeout,則可以預(yù)置一個(gè)等待時(shí)間,如 果等待的時(shí)間超過(guò)預(yù)置的閾值之后就不再等待,并返回處理其他的消息);假 設(shè)窗口B假死了,線程A還是可以繼續(xù)運(yùn)行。
需要注意的是,上面兩種情況中提到的窗口 B所在的線程不屬于線程A。如果窗口 B屬于線程A,那么無(wú)論是阻塞方式還是非阻塞方式均會(huì)導(dǎo)致假死傳 遞,即窗口 B的假死都會(huì)影響線程A。另外,上述窗口 B既可以是子窗口,也 可以是頂層窗口,窗口結(jié)構(gòu)不影響表現(xiàn)。
而對(duì)于上述應(yīng)用程序獲得的各類消息而言,輸入消息的發(fā)送方式通常是由 應(yīng)用程序決定的(通常設(shè)置為非阻塞方式);而系統(tǒng)消息的發(fā)送方式是一般是 由操作系統(tǒng)決定的,以當(dāng)前應(yīng)用最為廣泛的Windows操作系統(tǒng)為例,由Windows 操作系統(tǒng)發(fā)送的系統(tǒng)消息均以阻塞方式(通常是以SendMessage的方式)進(jìn)行。
為了更好地理解本發(fā)明實(shí)施例提供的方法,下面以多標(biāo)簽網(wǎng)頁(yè)瀏覽器為例 進(jìn)行描述。對(duì)多標(biāo)簽瀏覽器中, 一旦某頁(yè)面發(fā)生假死,也無(wú)法對(duì)其他頁(yè)面進(jìn)行 操作的原因進(jìn)行分析。
現(xiàn)有的多標(biāo)簽網(wǎng)頁(yè)瀏覽器在創(chuàng)建窗口時(shí)通常是將不同標(biāo)簽對(duì)應(yīng)的頁(yè)面窗 口繼承于同一父窗口下,以遨游瀏覽器為例,圖3表示了在遨游瀏覽器進(jìn)行如 圖l的網(wǎng)頁(yè)瀏覽時(shí),其各個(gè)窗口的結(jié)構(gòu)圖。
在圖3中,"Maxthon2-View,,即為顯示網(wǎng)頁(yè)內(nèi)容的窗口,簡(jiǎn)稱為頁(yè)面窗口。 需要說(shuō)明的是,Maxthon2_View只是一個(gè)容器窗口 ,它還有其他子窗口,如 Internet Explorer_Server (在圖中未示出)等用于顯示網(wǎng)頁(yè)內(nèi)容。由于當(dāng)前 開了 3個(gè)網(wǎng)頁(yè),所以在窗口結(jié)構(gòu)圖中可以看到有3個(gè)Maxthon2—View頁(yè)面窗口 , 這3個(gè)頁(yè)面窗口都以"Afx: 400000: 2008: 10011: 0: 0"這個(gè)窗口為父窗口。
也就是說(shuō)每個(gè)標(biāo)簽對(duì)應(yīng)于一個(gè)網(wǎng)頁(yè),每個(gè)網(wǎng)頁(yè)都由一組窗口 (指的是上 述結(jié)構(gòu)圖中 "Maxthon2-View,,前面"+,,下的那些未顯示出來(lái)的一組子窗口 ) 進(jìn)行管理,這一組窗口有一個(gè)父窗口 (即上述結(jié)構(gòu)中Maxthon2—View),且這個(gè) 父窗口也有一個(gè)父窗口 (即上述結(jié)構(gòu)中的"Afx: 400000: 2008: 10011: 0: 0")。
在這種窗口結(jié)構(gòu)下,當(dāng)用戶對(duì)某標(biāo)簽對(duì)應(yīng)的頁(yè)面進(jìn)行某種操作(例如進(jìn)行 網(wǎng)頁(yè)縮放)時(shí),處理流程是這樣的用戶先點(diǎn)擊縮放按鈕,然后這個(gè)按鈕所在 的窗口向框架窗口通知被點(diǎn)擊的消息,于是框架窗口找到當(dāng)前展現(xiàn)的標(biāo)簽所對(duì) 應(yīng)的頁(yè)面窗口,并向這個(gè)頁(yè)面窗口發(fā)送一個(gè)進(jìn)行縮放的消息,于是該頁(yè)面窗口 收到這個(gè)消息之后就去執(zhí)行縮放的功能了。當(dāng)然在這期間,由于Windows操作 系統(tǒng)自身的特點(diǎn)(如前文所述),還需要在窗口間交互一些系統(tǒng)消息,這些系統(tǒng)消息都是由Windows操作系統(tǒng)發(fā)送的,而且是以阻塞的消息發(fā)送方式進(jìn)行發(fā) 送,因此只有當(dāng)所有消息得到響應(yīng)時(shí),才能完成對(duì)窗口的操作。
例如,在圖3所示的窗口結(jié)構(gòu)中(為清楚起見(jiàn),下面分別用"05B6"、 "070C"、 "0774,,依次來(lái)代表頁(yè)面窗口 "Window 004705B6" " Maxthon2—View,,、 "Window 006C070C" " Maxthon2—View"、 "Window 00270774 " " Maxthon2—View"),布I 設(shè)當(dāng)前展現(xiàn)的標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口是"05B6",用戶點(diǎn)擊了縮放按鈕,則在框 架窗口 "Maxthon2—Fram"向"05B6"頁(yè)面窗口發(fā)送進(jìn)行縮放的消息的同時(shí),
"05B6"頁(yè)面窗口的父窗口 "Afx: 400000: 2008: 10011: 0: 0"需要以阻塞方式 向其各個(gè)子窗口 (包括"05B6"、 "070C"及"0774")發(fā)送系統(tǒng)消息,而且, 只有各條系統(tǒng)消息均得到響應(yīng)時(shí),才能完成窗口的縮^:。
此時(shí),如果當(dāng)前展現(xiàn)的"05B6"發(fā)生假死,則如果用戶想要對(duì)"070C"進(jìn) 行才喿作時(shí),該頁(yè)面窗口的父窗口 "Afx: 400000: 2008: 10011: 0: 0"仍然需要以 阻塞方式向其各個(gè)子窗口 (包括"05B6"、 "070C"及"0774")發(fā)送系統(tǒng)消息。 但由于"05B6,,正處于假死狀態(tài),因此該父窗口 "Afx: 400000: 2008: 10011: 0: 0" 向"05B6"發(fā)送系統(tǒng)消息后,"05B6"無(wú)法^L出響應(yīng),進(jìn)而該父窗口
"Afx: 400000: 2008: 10011: 0: 0"將處于永遠(yuǎn)等待狀態(tài),使得對(duì)"070C"的操 作也無(wú)法完成。因?yàn)橐瓿捎脩魧?duì)"070C"的操作,同樣需要父窗口
"Afx: 400000: 2008: 10011: 0: 0"以阻塞的方式向"070C,,等各子窗口發(fā)生系 統(tǒng)消息,但是,由于此前出現(xiàn)假死的"05B6"窗口一直無(wú)法對(duì)父窗口
"Afx: 400000: 2008: 10011: 0: 0"予以響應(yīng),而基于阻塞方式的發(fā)送才幾制,父 窗口 "Afx: 400000: 2008: 10011: 0: 0"在得到"05B6"窗口的響應(yīng)之前,是無(wú) 法進(jìn)行其他操作的,因此也就無(wú)法為了完成用戶對(duì)"070C"的操作而向個(gè)子窗 口發(fā)送系統(tǒng)消息,進(jìn)而用戶對(duì)"070C"的操作也處于永遠(yuǎn)的等待狀態(tài),于是
"070C"窗口也沒(méi)有反應(yīng)了?;谕瑯拥牡览?,也無(wú)法完成對(duì)"0774"的操作。 總之,基于"Afx: 400000: 2008: 10011: 0: 0"窗口和"05B6"、 "070C"、 "0774" 三個(gè)頁(yè)面窗口之間的父子關(guān)系,要完成對(duì)頁(yè)面窗口的操作需要
"Afx: 400000: 2008: 10011: 0: 0"窗口向各子窗口以阻塞方式發(fā)送系統(tǒng)消息, 因此,導(dǎo)致一個(gè)頁(yè)面窗口發(fā)生假死會(huì)直接影響其他頁(yè)面窗口也無(wú)法操作。如果Windows自身所有的系統(tǒng)消息都是通過(guò)非阻塞方式來(lái)實(shí)現(xiàn)的,那么一 個(gè)應(yīng)用程序很自然就能做到"防假死"了 (只要把不同的窗口放到不同的線程 中即可)。但是如前文所述,實(shí)際上并不是這樣,只有一些外設(shè)消息、繪圖消 息(例如鼠標(biāo)、鍵盤等,以及繪圖消息窗-PAINT、麗-NCPAINT等)等消息是通 過(guò)非阻塞方式來(lái)發(fā)送的,其他的系統(tǒng)消息(例如改變大小的通知麗-SIZE、改 變位置的通知麗—POSCHANGING、麗—POSCHANGED等)均是通過(guò)阻塞方式完成的。 假設(shè)窗口B已經(jīng)假死,如果線程A以非阻塞方式向窗口B發(fā)送消息,則線程A的 執(zhí)行不會(huì)受影響(只不過(guò)是消息沒(méi)有被及時(shí)處理而已),但是此時(shí)若線程A向窗 口B發(fā)送了系統(tǒng)消息(系統(tǒng)消息一般是通過(guò)阻塞方式發(fā)送的),則線程A也會(huì)隨 之假死。由于這些系統(tǒng)消息是windows內(nèi)部實(shí)現(xiàn)的,故無(wú)法通過(guò)修改第三方應(yīng) 用程序(如瀏覽器)來(lái)避免假死的傳遞。
可見(jiàn),在多標(biāo)簽應(yīng)用程序中進(jìn)行用戶消息的交互時(shí),通常會(huì)產(chǎn)生如下系統(tǒng) 消息,并且是需要通過(guò)阻塞方式發(fā)送的
一個(gè)父窗口下面有一個(gè)或多個(gè)子窗口,當(dāng)這個(gè)父窗口獲得焦點(diǎn)(例如,通 過(guò)操作使瀏覽器的框架窗口成為當(dāng)前的活動(dòng)窗口 )時(shí),系統(tǒng)會(huì)以阻塞方式向各 個(gè)子窗口發(fā)送"麗-CHILDACTIVATE"消息。
需要說(shuō)明的是,在一些操作系統(tǒng)中(如Windows操作系統(tǒng)),還可能存在以 下情況多個(gè)頂層窗口 (A、 B、 C…)有一個(gè)共同的"所有者(Owner)"窗口0。 當(dāng)某個(gè)頂層窗口 A的大小或顯示狀態(tài)發(fā)生變化時(shí),所有者窗口0會(huì)以阻塞方式向 其他頂層窗口 (B、 C…)發(fā)送麗-POSCHANGING和麗-POSCHANGED消息。當(dāng)然, 在其他才喿作系統(tǒng)中可能不存在這種情況。
從上述分析可以看出,造成一個(gè)窗口假死便導(dǎo)致整個(gè)瀏覽器無(wú)法正常運(yùn)行 的根本原因在于各個(gè)標(biāo)簽所在的頁(yè)面窗口具有一個(gè)共同的父窗口,各頁(yè)面窗 口在響應(yīng)用戶的輸入信息的同時(shí),該父窗口會(huì)向各個(gè)頁(yè)面窗口發(fā)送(以阻塞方 式)系統(tǒng)消息,只有各條消息均能正常被處理時(shí),才能完成用戶信息的交互。 因此,如果某頁(yè)面窗口A發(fā)生假死,則其父窗口向其發(fā)送系統(tǒng)消息時(shí),將無(wú)法 向父窗口返回響應(yīng)消息,使得父窗口一直處于等待狀態(tài);此時(shí)如果需要對(duì)其他頁(yè)面窗口進(jìn)行操作,該父窗口也無(wú)法響應(yīng),因此無(wú)法完成對(duì)其他頁(yè)面窗口的操 作,甚至導(dǎo)致整個(gè)應(yīng)用程序無(wú)法正常運(yùn)行。
然而實(shí)際上,該父窗口以阻塞方式向各頁(yè)面窗口發(fā)送的系統(tǒng)消息可能并沒(méi) 有實(shí)際的意義(操作系統(tǒng)可能會(huì)用到這個(gè)消息,但是應(yīng)用程序不會(huì)用到,也可
以理解為,即使windows不發(fā)送這個(gè)消息,程序也能夠正常運(yùn)行),各頁(yè)面窗口 接收到該父窗口的消息時(shí),只需要返回響應(yīng)消息,無(wú)須進(jìn)行其他的處理。也就 是說(shuō),實(shí)際上如果該父窗口沒(méi)有向各頁(yè)面窗口發(fā)送系統(tǒng)消息,當(dāng)前展現(xiàn)的頁(yè)面 窗口還是可以處理用戶輸入信息的。
因此,本發(fā)明實(shí)施例將多標(biāo)簽應(yīng)用程序中各標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為與 應(yīng)用程序的框架窗口平級(jí)的頂層窗口,這樣,便不會(huì)有父窗口以阻塞方式向這 些頁(yè)面窗口發(fā)送系統(tǒng)消息;當(dāng)然,在Windows等操作系統(tǒng)中,為了避免所有者 窗口向各個(gè)頁(yè)面窗口發(fā)送系統(tǒng)消息,還需要將所述頂層窗口的所有者置為空。
這樣,從窗口結(jié)構(gòu)上看,由以前的一個(gè)應(yīng)用程序?qū)?yīng)一沖果樹,變?yōu)橐粋€(gè)應(yīng) 用程序?qū)?yīng)多棵樹(樹的數(shù)目由應(yīng)用程序中標(biāo)簽的數(shù)目決定),窗口結(jié)構(gòu)如圖4 所示,為本發(fā)明建立的多標(biāo)簽瀏覽器的窗口結(jié)構(gòu)示意圖,其中,SE-AxControl 為每個(gè)標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口。可以看出,這種結(jié)構(gòu)使得標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口不 再有父窗口 (或者說(shuō)父窗口為桌面),在響應(yīng)用戶輸入信息時(shí)也就不再有父窗 口向各個(gè)頁(yè)面窗口發(fā)送消息,各個(gè)頁(yè)面窗口之間相互獨(dú)立,因此,在響應(yīng)用戶
輸入信息的過(guò)程中,即使某個(gè)頁(yè)面窗口出現(xiàn)了假死,其他各頁(yè)面窗口也不會(huì)受 到影響,用戶可以繼續(xù)瀏覽其他頁(yè)面窗口,還可以將該出現(xiàn)假死的頁(yè)面窗口關(guān) 閉或進(jìn)行重新加載。
例如,在圖4所示的窗口結(jié)構(gòu)中(為清楚起見(jiàn),下面分別用"09C6"、 "0A6E"、 "097E,,來(lái)代表頁(yè)面窗口 "Window 01F609C6" " SE一AxControl" 、 "Window 01D50A6E" 11 SE_AxControl"、 "Window 0109097E" " SE—AxControl" ), j艮i殳 當(dāng)前展現(xiàn)的標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口是"09C6",用戶通過(guò)某種操作(例如用戶用 鼠標(biāo)點(diǎn)擊瀏覽器的標(biāo)題欄)使瀏覽器的框架窗口成為當(dāng)前的活動(dòng)窗口,則框架 窗口 "SE_SogouExploreFrame"向"09C6"頁(yè)面窗口發(fā)送相應(yīng)的消息,然后便 可以直接進(jìn)行相關(guān)的操作了,在此期間不會(huì)產(chǎn)生系統(tǒng)消息,也就是說(shuō),由于各頁(yè)面窗口 ("09C6"、 "0A6E"、 "097E,,)沒(méi)有父窗口,而且各頁(yè)面窗口的所有者 也為空,因此在此期間瀏覽器框架窗口所在線程也不會(huì)向各個(gè)頁(yè)面窗口發(fā)送任 何系統(tǒng)消息。
此時(shí),如果當(dāng)前展現(xiàn)的"09C6"發(fā)生假死,由于不存在一個(gè)"09C6"、 "0A6E,, 和"097E,,共同的父窗口需要向這幾個(gè)頁(yè)面窗口以阻塞的方式發(fā)送系統(tǒng)消息來(lái) 協(xié)助完成對(duì)頁(yè)面窗口的#:作,進(jìn)而,也不存在一個(gè)"09C6"、 "0A6E"和"097E" 共同的父窗口由于"09C6"無(wú)法給它響應(yīng)導(dǎo)致自己無(wú)法處理其他系統(tǒng)消息,因 此,當(dāng)用戶還要對(duì)"070C"進(jìn)行操作時(shí),只需要由框架窗口 "SE—SogouExploreFrame"將輸入消息發(fā)送到"070C",即可完成對(duì)"070C,, 的操作,而不涉及某個(gè)父窗口向作為其子窗口的各頁(yè)面窗口以阻塞方式發(fā)送系 統(tǒng)消息來(lái)完成對(duì)頁(yè)面窗口操作的問(wèn)題。基于同樣的道理,也可以完成對(duì)"0774" 的操作。由此可見(jiàn),采用本發(fā)明實(shí)施例的技術(shù)方案,不會(huì)造成假死的傳遞,整 個(gè)應(yīng)用程序不會(huì)受到影響。
值得注意的是,在本發(fā)明實(shí)施例中,各種輸入消息的交互既可以釆用非阻 塞方式,也可以采用阻塞方式進(jìn)行。當(dāng)然,如果采用非阻塞方式,可以^f吏框架 窗口向頁(yè)面窗口發(fā)送輸入消息時(shí),不必等待該窗口處理完該消息便可以返回, 并處理其他頁(yè)面窗口的消息,效果會(huì)更佳。
另外,如果判定某頁(yè)面窗口發(fā)生假死,還可以向用戶給出提示信息(告知 用戶該頁(yè)面窗口發(fā)生假死了 ,提醒用戶進(jìn)行關(guān)閉或重新加載等操作,參見(jiàn)圖5 )。 可見(jiàn),本發(fā)明實(shí)施例有效地提升了用戶的體驗(yàn)。
關(guān)于如何判定頁(yè)面窗口是否發(fā)生假死,可以采用一些變通的方法進(jìn)行檢 測(cè),比如在一段時(shí)間內(nèi)(例如5秒),這個(gè)頁(yè)面窗口沒(méi)有處理任何發(fā)送給它的消 息,則認(rèn)為該頁(yè)面窗口可能發(fā)生假死,等等。需要說(shuō)明的是,實(shí)際上可能無(wú)法 準(zhǔn)確檢測(cè)頁(yè)面窗口是否發(fā)生假死(這一點(diǎn)連windows自身也無(wú)法完成),故可能 會(huì)造成一定的誤判。
關(guān)于在建立的頂層窗口中進(jìn)行用戶輸入消息交互的具體實(shí)現(xiàn),需要注意的 是框架窗口與標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口之間具有一定的對(duì)應(yīng)關(guān)系,才艮據(jù)這種對(duì)應(yīng) 關(guān)系才能最終實(shí)現(xiàn)框架窗口與頁(yè)面窗口之間的通訊,完成與用戶信息的交互。
14在類似遨游瀏覽器那種傳統(tǒng)窗口結(jié)構(gòu)中,Windows可以自動(dòng)建立這種對(duì)應(yīng)關(guān)系, 在框架窗口只要用 一個(gè)系統(tǒng)函數(shù)(例如Ge tWindow (CHILD))就可以得到頁(yè)面窗 口,并向頁(yè)面窗口發(fā)送消息。
而本發(fā)明實(shí)施例中打石皮了這種傳統(tǒng)的窗口結(jié)構(gòu),Windows系統(tǒng)可能無(wú)法自 動(dòng)建立起框架窗口與頁(yè)面窗口之間的對(duì)應(yīng)關(guān)系,進(jìn)而就沒(méi)有函數(shù)來(lái)調(diào)用來(lái)獲得 頁(yè)面窗口了。在上述這種情況下,為了實(shí)現(xiàn)框架窗口與頁(yè)面窗口之間的正常通 訊,本發(fā)明實(shí)施例可以采用如下方式在將標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗 口時(shí),建立框架窗口與頁(yè)面窗口之間的對(duì)應(yīng)關(guān)系,并將這種對(duì)應(yīng)關(guān)系保存,這 樣框架窗口在接收到用戶消息后便可以根據(jù)預(yù)先保存的對(duì)應(yīng)關(guān)系找到相應(yīng)的 頁(yè)面窗口,并向頁(yè)面窗口發(fā)送消息了。然后,頁(yè)面窗口根據(jù)所述接收到的消息 執(zhí)行相應(yīng)的操作,其中,所述操作可以包括窗口的縮放、切換或查看等等。當(dāng) 然,也不排除將來(lái)的Windows系統(tǒng)或者其他操作系統(tǒng),在采用本發(fā)明實(shí)施例所 述的窗口結(jié)構(gòu)下,能夠自動(dòng)建立起框架窗口與頁(yè)面窗口之間的對(duì)應(yīng)關(guān)系。
在本發(fā)明實(shí)施例中,可以根據(jù)實(shí)際需要隨時(shí)將標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為 頂層窗口, 一種優(yōu)選的方式是,可以在創(chuàng)建新標(biāo)簽的同時(shí),就將該標(biāo)簽對(duì)應(yīng)的 頁(yè)面窗口創(chuàng)建為頂層窗口。其中,對(duì)于多標(biāo)簽網(wǎng)頁(yè)瀏覽器,所述創(chuàng)建新標(biāo)簽可 以包括以下兩種 一種是用戶在標(biāo)簽欄采用雙擊等的方式建立新的標(biāo)簽,此時(shí) 標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口可能為空白;另 一種是在新標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口中打開某 網(wǎng)頁(yè),此時(shí)通常是在當(dāng)前展現(xiàn)的頁(yè)面中點(diǎn)擊鏈接等方式,瀏覽器會(huì)自動(dòng)建立新 的標(biāo)簽。在多標(biāo)簽文本編輯器中,這種方式的意義凸顯。以excel為例,頁(yè)面 窗口發(fā)生假死的情況不僅會(huì)發(fā)生在進(jìn)行文本編輯的過(guò)程中,還可能出現(xiàn)在打開 excel文本的過(guò)程中,如果在打開某excel文本時(shí),其中一個(gè)標(biāo)簽對(duì)應(yīng)的頁(yè)面窗 口發(fā)生了假死,如果標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口沒(méi)有創(chuàng)建成頂層窗口,則可能會(huì)導(dǎo)致 無(wú)法查看其他沒(méi)有發(fā)生假死的頁(yè)面窗口中的數(shù)據(jù)。因此,在創(chuàng)建新標(biāo)簽時(shí)就將 其對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口 ,可以避免這種情況的發(fā)生。
需要說(shuō)明的是,在本發(fā)明實(shí)施例的方法中,框架窗口與標(biāo)簽對(duì)應(yīng)的頁(yè)面窗 口是相互獨(dú)立的(而不是像傳統(tǒng)結(jié)構(gòu)中那樣,標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口是框架窗口 的某個(gè)子窗口的子窗口),如果不進(jìn)行必要的設(shè)置,框架窗口與頁(yè)面窗口的大 小以及出現(xiàn)的位置可以是任意的。但是為了使用戶獲得更好的視覺(jué)效果,可以將標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口的位置及大小進(jìn)行適應(yīng)性的調(diào)整,使其與框架窗口的位 置及大小相匹配。也就是說(shuō),最終呈現(xiàn)在用戶面前的界面可能與遨游等瀏覽器 并沒(méi)有區(qū)別,但是實(shí)際上該界面并不是一個(gè)整體,而是"拼接"在一起的???br>
以將本發(fā)明實(shí)施例提供給用戶的界面稱為"異步用戶界面(User Interface, UI)",這種用戶界面可以避免一個(gè)標(biāo)簽頁(yè)面"假死"導(dǎo)致瀏覽器框架或其他標(biāo) 簽頁(yè)面也無(wú)法操作的現(xiàn)象。
是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可 讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括如下步驟將多標(biāo)簽應(yīng)用程序中標(biāo)簽 對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口;在所述頂層窗口中進(jìn)^f亍用戶消息的交互。所 述的存儲(chǔ)介質(zhì),如R0M/RAM、磁碟、光盤等。
與本發(fā)明實(shí)施例提供的實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法相對(duì) 應(yīng),本發(fā)明實(shí)施例還提供了 一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的系統(tǒng), 參見(jiàn)圖6,該系統(tǒng)包括以下模塊
窗口管理模塊U601 ,用于將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為 頂層窗口;
消息交互模塊U6 02,用于在所述頂層窗口中進(jìn)行用戶消息的交互。
其中,窗口管理模塊U6 01將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為 頂層窗口,并在所述頂層窗口中進(jìn)行消息的交互。可以^使得各標(biāo)簽對(duì)應(yīng)的頁(yè)面 窗口沒(méi)有父窗口,因此當(dāng)響應(yīng)用戶消息時(shí),不會(huì)有父窗口向各個(gè)頁(yè)面窗口發(fā)送 系統(tǒng)消息(以阻塞方式),這樣,即使有某個(gè)頁(yè)面窗口發(fā)生假死,其他頁(yè)面窗 口也不會(huì)受到影響,從而提升了用戶的體驗(yàn)。
其中,在Windows等操作系統(tǒng)中,為了避免頂層窗口的所有者窗口向各頁(yè) 面窗口發(fā)送消息,窗口管理^t塊U6 01可以將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面 窗口創(chuàng)建為所有者為空的頂層窗口。需要說(shuō)明的是,在非Windows操作系統(tǒng)中, 有可能涉及不到所有者為空的技術(shù)特征,只需要將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng) 的頁(yè)面窗口創(chuàng)建為頂層窗口,就可以達(dá)到在用戶對(duì)某個(gè)頁(yè)面窗口梯:作時(shí),不存在某個(gè)父窗口需要向作為其子窗口的各頁(yè)面窗口以阻塞方式發(fā)送系統(tǒng)消息的 目的,進(jìn)而達(dá)到不出現(xiàn)^f〖I死傳遞的目的。
消息交互模塊U602可以采用非阻塞的消息發(fā)送方式在所述頂層窗口中進(jìn) 行用戶消息的交互。
在本發(fā)明實(shí)施例所建立的窗口結(jié)構(gòu)下響應(yīng)用戶消息的過(guò)程中,也可以是通 過(guò)框架窗口向各個(gè)標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口發(fā)送消息,進(jìn)而由各頁(yè)面窗口執(zhí)行相應(yīng) 的操作,這就需要框架窗口與頁(yè)面窗口之間具有對(duì)應(yīng)關(guān)系。但是由于按照上述 方法創(chuàng)建的窗口結(jié)構(gòu)打破了傳統(tǒng)的模式,系統(tǒng)無(wú)法自動(dòng)建立起窗口之間的關(guān) 系,因此,需要在創(chuàng)建所述頂層窗口時(shí),建立起框架窗口與頂層窗口之間的對(duì) 應(yīng)關(guān)系,并進(jìn)行保存。此時(shí),消息交互^f莫塊U602可以包括以下子;^莫塊
對(duì)應(yīng)關(guān)系保存子模塊U6 021 ,用于建立并保存所述多標(biāo)簽應(yīng)用程序的主框 架窗口與所述頂層窗口的對(duì)應(yīng)關(guān)系;
通訊子模塊U6022,用于觸發(fā)所述主框架窗口將接收到的用戶消息發(fā)送到 相應(yīng)的標(biāo)簽對(duì)應(yīng)的頂層窗口 ,并觸發(fā)該頂層窗口執(zhí)行所述用戶消息對(duì)應(yīng)的操 作。
為了使最終呈現(xiàn)出的界面更加符合用戶的使用習(xí)慣,該系統(tǒng)還可以包括 窗口調(diào)整模塊U603,用于調(diào)整頂層窗口的位置及大小,以使頂層窗口與所 述主框架窗口的位置及大小相匹配。 另外,該系統(tǒng)還可以包括
提示模塊U604,用于當(dāng)某標(biāo)簽對(duì)應(yīng)的頂層窗口發(fā)生假死時(shí),向用戶發(fā)出提 示信息。包括提示用戶關(guān)閉該窗口或進(jìn)行重新加載,等等。
在本發(fā)明的優(yōu)選實(shí)施例中,可以在建立新標(biāo)簽(例如創(chuàng)建新的空白頁(yè)或在 新窗口中打開等)的同時(shí),將所述新標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口。這
種方式對(duì)于多標(biāo)簽文本編輯器尤為有利,可以避免在打開文件的過(guò)程中某頁(yè)面 發(fā)生假死造成整個(gè)文件無(wú)法正常打開。當(dāng)然,也可以在根據(jù)實(shí)際需要隨時(shí)將標(biāo) 簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口 ,例如當(dāng)打開了較多的頁(yè)面窗口時(shí)進(jìn)行創(chuàng) 建。
以上對(duì)本發(fā)明所提供的一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思
想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處。綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明 的限制。
權(quán)利要求
1、一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法,其特征在于,包括將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口;在所述頂層窗口中進(jìn)行用戶消息的交互。
2、 才艮據(jù)權(quán)利要求1所述的方法,其特征在于,所述將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口包括所述將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為所有者為空的頂層窗口。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在所述頂層窗口中進(jìn)行用戶消息的交互包括以非阻塞的消息發(fā)送方式在所述頂層窗口中進(jìn)行用戶消息的交互。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述頂層窗口中進(jìn)行用戶消息的交互包括建立并保存所述多標(biāo)簽應(yīng)用程序的主框架窗口與所述頂層窗口的對(duì)應(yīng)關(guān)系;觸發(fā)所述主框架窗口將接收到的用戶消息發(fā)送到相應(yīng)的標(biāo)簽對(duì)應(yīng)的頂層窗口 ,并觸發(fā)該頂層窗口執(zhí)行所述用戶消息對(duì)應(yīng)的操作。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括調(diào)整頂層窗口的位置及大小,以使頂層窗口與所述主框架窗口的位置及大小相適應(yīng)。
6、 根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括如果判定某標(biāo)簽對(duì)應(yīng)的頂層窗口發(fā)生假死,則向用戶發(fā)出提示信息。
7、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口包括在多標(biāo)簽應(yīng)用程序中建立新標(biāo)簽的同時(shí),將所述新標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口。
8、 根據(jù)權(quán)利要求1至7任意一項(xiàng)所述的方法,其特征在于,所述多標(biāo)簽應(yīng)用程序包括多標(biāo)簽網(wǎng)頁(yè)瀏覽器或多標(biāo)簽文檔編輯器或多標(biāo)簽閱讀器。
9、 一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的系統(tǒng),其特征在于,包括窗口管理模塊,用于將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口;消息交互模塊,用于在所述頂層窗口中進(jìn)行用戶消息的交互。
10、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述窗口管理模塊具體用于將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為所有者為空的頂層窗口 。
11、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述消息交互模塊具體用于以非阻塞的消息發(fā)送方式在所述頂層窗口中進(jìn)行用戶消息的交互。
12、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述消息交互模塊包括對(duì)應(yīng)關(guān)系保存子模塊,用于建立并保存所述多標(biāo)簽應(yīng)用程序的主框架窗口與所述頂層窗口的對(duì)應(yīng)關(guān)系;通訊模塊,用于觸發(fā)所述主框架窗口將接收到的用戶消息發(fā)送到相應(yīng)的標(biāo)簽對(duì)應(yīng)的頂層窗口 ,并觸發(fā)該頂層窗口執(zhí)行所述用戶消息對(duì)應(yīng)的操:作。
13、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,還包括窗口調(diào)整模塊,用于調(diào)整頂層窗口的位置及大小,以使頂層窗口與所述主框架窗口的位置及大小相匹配。
14、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,還包括提示模塊,用于當(dāng)某標(biāo)簽對(duì)應(yīng)的頂層窗口發(fā)生假死時(shí),向用戶發(fā)出提示信臺(tái)
15、 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述窗口管理模塊在多標(biāo)簽應(yīng)用程序中建立新標(biāo)簽的同時(shí),將所述新標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗D 。
16、 根據(jù)權(quán)利要求9至15任意一項(xiàng)所述的系統(tǒng),其特征在于,所述多標(biāo)簽應(yīng)用程序包括多標(biāo)簽網(wǎng)頁(yè)瀏覽器或多標(biāo)簽文檔編輯器或多標(biāo)簽閱讀器。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的方法,該方法包括將多標(biāo)簽應(yīng)用程序中標(biāo)簽對(duì)應(yīng)的頁(yè)面窗口創(chuàng)建為頂層窗口;在所述頂層窗口中進(jìn)行用戶消息的交互。本發(fā)明還公開了一種實(shí)現(xiàn)多標(biāo)簽應(yīng)用程序中進(jìn)行消息交互的系統(tǒng)。通過(guò)本發(fā)明,即使某個(gè)頁(yè)面窗口發(fā)生假死,也不會(huì)使其他的頁(yè)面窗口受到影響,即可以正常對(duì)其他頁(yè)面窗口進(jìn)行操作,不會(huì)影響整個(gè)應(yīng)用程序的正常運(yùn)行,因此提升了用戶的體驗(yàn)。
文檔編號(hào)G06F17/30GK101504658SQ200910077869
公開日2009年8月12日 申請(qǐng)日期2009年1月23日 優(yōu)先權(quán)日2009年1月23日
發(fā)明者李子拓 申請(qǐng)人:北京搜狗科技發(fā)展有限公司