專利名稱:多WebView的網(wǎng)頁(yè)瀏覽控制方法及瀏覽器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及瀏覽器技術(shù)領(lǐng)域,特別涉及一種多WebView的網(wǎng)頁(yè)瀏覽控制方法及瀏
JaLzHFT O
背景技術(shù):
目前,由于單WebView(網(wǎng)頁(yè)視圖)瀏覽網(wǎng)頁(yè)過(guò)程中,網(wǎng)頁(yè)前進(jìn)后退需要重新render(渲染)頁(yè)面內(nèi)容,會(huì)導(dǎo)致前進(jìn)后退過(guò)程中用戶需要等較長(zhǎng)時(shí)間才能看到完整的頁(yè)面內(nèi)容,特別是大PC (個(gè)人電腦)頁(yè)面。對(duì)于部分頁(yè)面,重新render的頁(yè)面內(nèi)容可能還會(huì)默認(rèn)從頭開始展示,沒(méi)有記住用戶上次瀏覽的頁(yè)面位置。因此,使用單WebView瀏覽頁(yè)面在用戶體驗(yàn)上較差。UC手機(jī)瀏覽器:在自有內(nèi)核中實(shí)現(xiàn),全部用C++來(lái)開發(fā),安裝包太大。遨游手機(jī)瀏覽器:在應(yīng)用層實(shí)現(xiàn)。沒(méi)有攔截頁(yè)面內(nèi)瀏覽操作,頁(yè)面內(nèi)無(wú)法正常操作前進(jìn)后退。沒(méi)有區(qū)分多View (視圖)和單View打開,特定頁(yè)面使用多View打開會(huì)出問(wèn)題。天天手機(jī)瀏覽器:和遨游手機(jī)瀏覽器一樣,在應(yīng)用層實(shí)現(xiàn)。沒(méi)有攔截頁(yè)面內(nèi)瀏覽操作,頁(yè)面內(nèi)無(wú)法正常操作前 進(jìn)后退。沒(méi)有區(qū)分多View和單View打開,特定頁(yè)面使用多View打開會(huì)出問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明的目的旨在至少解決所述技術(shù)缺陷之一。為此,本發(fā)明的一個(gè)目的在于提出一種多WebView的網(wǎng)頁(yè)瀏覽控制方法。該方法可提高網(wǎng)頁(yè)瀏覽過(guò)程中前進(jìn)后退速度。本發(fā)明的另一個(gè)目的在于提出一種瀏覽器。為達(dá)到上述目的,本發(fā)明第一方面的實(shí)施例公開了一種多WebView的網(wǎng)頁(yè)瀏覽控制方法,包括以下步驟:瀏覽器加載頁(yè)面,并在所述頁(yè)面中注入監(jiān)控模塊,其中,所述瀏覽器包括多個(gè)WebView,且在所述瀏覽器的應(yīng)用層中維護(hù)有前進(jìn)后退列表,所述多個(gè)WebView共用所述前進(jìn)后退列表;所述監(jiān)控模塊檢測(cè)用戶的前進(jìn)或后退操作,并攔截所述前進(jìn)或后退操作;以及所述監(jiān)控模塊調(diào)用所述前進(jìn)后退列表根據(jù)所述前進(jìn)或后退操作進(jìn)行控。根據(jù)本發(fā)明實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法,全部在應(yīng)用層實(shí)現(xiàn),無(wú)需修改webkit (瀏覽器引擎)內(nèi)核,無(wú)需額外的webkit.so庫(kù)(瀏覽器引擎庫(kù)),既可減少客戶端安裝包大小,同時(shí)可兼容百度手機(jī)瀏覽器的系統(tǒng)內(nèi)核和自有內(nèi)核。另外,該方法只依賴底層的接口,應(yīng)用層維護(hù)一套多WebView的前進(jìn)后退列表,該列表與底層WebView數(shù)據(jù)保持一致,操作順序也與用戶瀏覽操作保持一致,并且通過(guò)一套前進(jìn)后退列表維護(hù)策略對(duì)前進(jìn)后退列表進(jìn)行維護(hù),從而保持與底層WebView數(shù)據(jù)的一致,并可通過(guò)監(jiān)控模塊控制其操作順序與用戶瀏覽操作一致。本發(fā)明實(shí)施例的方法采用多WebView瀏覽網(wǎng)頁(yè),提高網(wǎng)頁(yè)瀏覽過(guò)程中前進(jìn)后退速度并可以記住瀏覽歷史的網(wǎng)頁(yè)的位置。另外,根據(jù)本發(fā)明上述實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法還可以具有如下附加的技術(shù)特征:在一些示例中,還包括:所述監(jiān)控模塊監(jiān)聽所述頁(yè)面中用戶的頁(yè)面點(diǎn)擊事件;以及所述監(jiān)控模塊根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。在一些示例中,所述監(jiān)控模塊根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載進(jìn)一步包括:所述監(jiān)控模塊獲取所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素所在的文件對(duì)象模型DOM(文件對(duì)象模型)節(jié)點(diǎn);所述監(jiān)控模塊獲取與所述DOM節(jié)點(diǎn)相關(guān)的N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn),其中,N為正整數(shù);以及所述監(jiān)控模塊根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。在一些示例中,2彡N彡5。在一些示例中,所述監(jiān)控模塊根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載進(jìn)一步包括:所述監(jiān)控模塊判斷所述N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)中是否存在標(biāo)簽<a> (錨)以及是否含有href (超文本引用)屬性;如果判斷存在標(biāo)簽<a>且含有href屬性,則進(jìn)一步判斷所述href屬性值是否滿足預(yù)設(shè)條件;如果判斷滿足所述預(yù)設(shè)條件,則啟動(dòng)單個(gè)WebView加載,否則啟動(dòng)多個(gè)WebView加載。在一些示例中,所述預(yù)設(shè)條件為以下條件中的任一條:以javascript(基于對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語(yǔ)言)開頭、以#號(hào)開頭、undefined和null。在一些示例中,其中,所述前進(jìn)后退列表包括多個(gè)前進(jìn)后退表項(xiàng),每個(gè)所述前進(jìn)后退表項(xiàng)包括頁(yè)面的地址信息、使用加載所用的WebView以及所述頁(yè)面在所述WebView中前進(jìn)后退列表中的位置。在一些示例中,還包括:在頁(yè)面開始加載的回調(diào)接口 onPageStarted (WebView中的一種方法)中增加新的前 進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面位置的下一位;在開始加載頁(yè)面資源的回調(diào)接口onLoadResource (WebView中的一種方法)中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置,其中,所述頁(yè)面的Url (統(tǒng)一資源定位符)為對(duì)應(yīng)WebView當(dāng)前頁(yè)面的Url ;在頁(yè)面結(jié)束加載的回調(diào)接口onPageFinished (WebView中的一種方法)中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置。在一些示例中,還包括:更新所述瀏覽器的應(yīng)用層中的前進(jìn)后退列表。在一些示例中,所述監(jiān)控模塊調(diào)用所述前進(jìn)后退列表根據(jù)所述前進(jìn)或后退操作進(jìn)行控制進(jìn)一步包括:根據(jù)所述前進(jìn)后退列表獲取所述前進(jìn)后退列表中的當(dāng)前前進(jìn)后退表項(xiàng)以及目標(biāo)前進(jìn)后退表項(xiàng);以及對(duì)所述當(dāng)前前進(jìn)后退表項(xiàng)和目標(biāo)前進(jìn)后退表項(xiàng)進(jìn)行校驗(yàn),并根據(jù)校驗(yàn)結(jié)果進(jìn)行控制。 在一些示例中,還包括:創(chuàng)建并維護(hù)WebView池,其中,當(dāng)所述WebView池中WebView的個(gè)數(shù)小于第一預(yù)設(shè)數(shù)值時(shí),則創(chuàng)建至少一個(gè)WebView。在一些示例中,當(dāng)所述WebView池中WebView的個(gè)數(shù)大于第二預(yù)設(shè)數(shù)值時(shí),則對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。在一些示例中,根據(jù)頁(yè)面類型和窗口類型對(duì)所述WebView池中至少部分的WebV i ew進(jìn)行回收。
在一些示例中,其特征在于,對(duì)于單窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則銷毀該窗口對(duì)應(yīng)的個(gè)WebView ;對(duì)于單窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則銷毀該窗口對(duì)應(yīng)的個(gè)WebView ;對(duì)于多窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則銷毀個(gè)WebView ;以及對(duì)于多窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則銷毀個(gè)WebView。本發(fā)明第二方面的實(shí)施例公開了一種瀏覽器,包括多個(gè)WebView;前進(jìn)后退列表維護(hù)模塊,用于在所述瀏覽器的應(yīng)用層中維護(hù)前進(jìn)后退列表,其中,所述多個(gè)WebView共用所述前進(jìn)后退列表;加載模塊,用于加載頁(yè)面,并在所述頁(yè)面中注入監(jiān)控模塊;所述監(jiān)控模塊,用于檢測(cè)用戶的前進(jìn)或后退操作,并攔截所述前進(jìn)或后退操作,以及調(diào)用所述前進(jìn)后退列表根據(jù)所述前進(jìn)或后退操作進(jìn)行控制。根據(jù)本發(fā)明實(shí)施例的瀏覽器,全部在應(yīng)用層實(shí)現(xiàn),無(wú)需修改webkit內(nèi)核,無(wú)需額外的webkit.so庫(kù),既可減少客戶端安裝包大小,同時(shí)可兼容百度手機(jī)瀏覽器的系統(tǒng)內(nèi)核和自有內(nèi)核。另外,該瀏覽器只依賴底層的接口,應(yīng)用層維護(hù)一套多WebView的前進(jìn)后退列表,該列表與底層WebView數(shù)據(jù)保持一致,操作順序也與用戶瀏覽操作保持一致,并且通過(guò)一套前進(jìn)后退列表維護(hù)策略對(duì)前進(jìn)后退列表進(jìn)行維護(hù),從而保持與底層WebView數(shù)據(jù)的一致,并可通過(guò)監(jiān)控模塊控制其操作順序與用戶瀏覽操作一致。本發(fā)明實(shí)施例的瀏覽器采用多WebView瀏覽網(wǎng)頁(yè),提高網(wǎng)頁(yè)瀏覽過(guò)程中前進(jìn)后退速度并可以記住瀏覽歷史的網(wǎng)頁(yè)的位置。另外,根據(jù)本發(fā)明上述實(shí)施例的瀏覽器還可以具有如下附加的技術(shù)特征:在一些示例中,所述監(jiān)控模塊,還用于監(jiān)聽所述頁(yè)面中用戶的頁(yè)面點(diǎn)擊事件,并根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。
在一些示例中,所述監(jiān)控模塊獲取所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素所在的文件對(duì)象模型DOM節(jié)點(diǎn),并獲取與所述DOM節(jié)點(diǎn)相關(guān)的N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn),其中,N為正整數(shù),以及根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。在一些示例中,2彡N彡5。在一些示例中,所述監(jiān)控模塊在判斷所述N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)中存在標(biāo)簽<a>且含有href屬性時(shí),進(jìn)一步判斷所述href屬性值是否滿足預(yù)設(shè)條件,且在判斷滿足所述預(yù)設(shè)條件之后啟動(dòng)單個(gè)WebView加載,否則啟動(dòng)多個(gè)WebView加載。在一些示例中,所述預(yù)設(shè)條件為以下條件中的任一條:以javascript開頭、以#號(hào)開頭、undefined 和 null。在一些示例中,其中,所述前進(jìn)后退列表包括多個(gè)前進(jìn)后退表項(xiàng),每個(gè)所述前進(jìn)后退表項(xiàng)包括頁(yè)面的地址信息、使用加載所用的WebView以及所述頁(yè)面在所述WebView中前進(jìn)后退列表中的位置。在一些示例中,所述前進(jìn)后退列表維護(hù)模塊還用于:在頁(yè)面開始加載的回調(diào)接口onPageStarted中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面位置的下一位;在開始加載頁(yè)面資源的回調(diào)接口onLoadResource中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置,其中,所述頁(yè)面的Url為對(duì)應(yīng)WebView當(dāng)前頁(yè)面的Url ;在頁(yè)面結(jié)束加載的回調(diào)接口 onPageFinished中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置。在一些示例中,所述前進(jìn)后退列表維護(hù)模塊還用于更新所述瀏覽器的應(yīng)用層中的iu進(jìn)后退列表。在一些示例中,所述監(jiān)控模塊還用于根據(jù)所述前進(jìn)后退列表獲取所述前進(jìn)后退列表中的當(dāng)前前進(jìn)后退表項(xiàng)以及目標(biāo)前進(jìn)后退表項(xiàng),并對(duì)所述當(dāng)前前進(jìn)后退表項(xiàng)和目標(biāo)前進(jìn)后退表項(xiàng)進(jìn)行校驗(yàn)。在一些示例中,還包括WebView池維護(hù)模塊,用于創(chuàng)建并維護(hù)WebView池,其中,當(dāng)所述WebView池中WebView的個(gè)數(shù)小于第一預(yù)設(shè)數(shù)值時(shí),則創(chuàng)建至少一個(gè)WebView。在一些示例中,當(dāng)所述WebView池中WebView的個(gè)數(shù)大于第二預(yù)設(shè)數(shù)值時(shí),所述WebView池維護(hù)模塊對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。在一些示例中,所述WebView池維護(hù)模塊根據(jù)頁(yè)面類型和窗口類型對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。在一些示例中,對(duì)于單窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則所述WebView池維護(hù)模塊銷毀該窗口對(duì)應(yīng)的個(gè)WebVi ew ;對(duì)于單窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則所述WebVi ew池維護(hù)模塊銷毀該窗口對(duì)應(yīng)的個(gè)WebV i ew ;對(duì)于多窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則所述WebView池維護(hù)模塊銷毀個(gè)WebView ;以及對(duì)于多窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則所述WebView池維護(hù)模塊銷毀個(gè)WebView。本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
本發(fā)明所述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法的流程圖;以及圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法的瀏覽器進(jìn)行頁(yè)面加載的流程圖;圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法的WebView創(chuàng)建流程圖;圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法的WebView回收流程圖;以及圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例的瀏覽器的示意圖。
具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。在本發(fā)明的描述中,需要理解的是,術(shù)語(yǔ)“縱向”、“橫向”、“上”、“下”、“前”、“后”、“左”、“右”、“ 豎直”、“水平”、“頂”、“底” “內(nèi)”、“外”等指示的方位或位置關(guān)系為基于附圖所示的方位或位置關(guān)系,僅是為了便于描述本發(fā)明和簡(jiǎn)化描述,而不是指示或暗示所指的裝置或元件必須具有特定的方位、以特定的方位構(gòu)造和操作,因此不能理解為對(duì)本發(fā)明的限制。在本發(fā)明的描述中,需要說(shuō)明的是,除非另有規(guī)定和限定,術(shù)語(yǔ)“安裝”、“相連”、“連接”應(yīng)做廣義理解,例如,可以是機(jī)械連接或電連接,也可以是兩個(gè)元件內(nèi)部的連通,可以是直接相連,也可以通過(guò)中間媒介間接相連,對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以根據(jù)具體情況理解所述術(shù)語(yǔ)的具體含義。以下結(jié)合附圖描述根據(jù)本發(fā)明實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法及瀏覽器。圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法的流程圖。如圖所示,該多WebView的網(wǎng)頁(yè)瀏覽控制方法,包括如下步驟:步驟SlOl:瀏覽器加載頁(yè)面,并在頁(yè)面中注入監(jiān)控模塊,其中,瀏覽器包括多個(gè)WebView,且在瀏覽器的應(yīng)用層中維護(hù)有前進(jìn)后退列表,多個(gè)WebView共用前進(jìn)后退列表。步驟S102:監(jiān)控模塊檢測(cè)用戶的前進(jìn)或后退操作,并攔截前進(jìn)或后退操作。步驟S103:監(jiān)控模塊調(diào)用前進(jìn)后退列表根據(jù)前進(jìn)或后退操作進(jìn)行控制。根據(jù)本發(fā)明實(shí)施例的多WebView的網(wǎng)頁(yè)瀏覽控制方法,全部在應(yīng)用層實(shí)現(xiàn),無(wú)需修改webkit內(nèi)核,無(wú)需額外的webkit so庫(kù),既可減少客戶端安裝包大小,同時(shí)可兼容百度手機(jī)瀏覽器的系統(tǒng)內(nèi)核和自有內(nèi)核。另外,該方法只依賴底層的接口,應(yīng)用層維護(hù)一套多WebView的前進(jìn)后退列表,該列表與底層WebView數(shù)據(jù)保持一致,操作順序也與用戶瀏覽操作保持一致,并且通過(guò)一套前進(jìn)后退列表維護(hù)策略對(duì)前進(jìn)后退列表進(jìn)行維護(hù),從而保持與底層WebView數(shù)據(jù)的一致,并可通過(guò)監(jiān)控模塊控制其操作順序與用戶瀏覽操作一致。本發(fā)明實(shí)施例的方法采用多WebView瀏覽網(wǎng)頁(yè),提高網(wǎng)頁(yè)瀏覽過(guò)程中前進(jìn)后退速度并可以記住瀏覽歷史的網(wǎng)頁(yè)的位置。在本發(fā)明的一個(gè)實(shí)施例中,監(jiān)控模塊還具有如下功能:I)監(jiān)控模塊監(jiān)聽頁(yè)面中用戶的頁(yè)面點(diǎn)擊事件。2)監(jiān)控模塊根據(jù)頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。具體地,監(jiān)控模塊根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載,進(jìn)一步包括:(I)監(jiān)控模塊獲取頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素所在的文件對(duì)象模型DOM節(jié)點(diǎn)。(2)監(jiān)控模塊獲取與DOM節(jié)點(diǎn)相關(guān)的N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn),其中,N為正整數(shù)。在本發(fā)明的具體示例中,2 SNS 5。(3)監(jiān)控模塊根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。在上 示例中,監(jiān)控模塊根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載,進(jìn)一步包括:(I)監(jiān)控模塊判斷N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)中是否存在標(biāo)簽<a>以及是否含有href屬性。(2)如果判斷存在標(biāo)簽<a>且含有href屬性,則進(jìn)一步判斷href屬性值是否滿足預(yù)設(shè)條件。
(3)如果判斷滿足預(yù)設(shè)條件,則啟動(dòng)單個(gè)WebView加載,否則啟動(dòng)多個(gè)WebView加載。其中,預(yù)設(shè)條件為以下條件中的任一條:以javascript開頭、以#號(hào)開頭、undefined和 null。作為一個(gè)具體的例子,例如對(duì)于某些特定頁(yè)面,如ajax局部加載,直接Get請(qǐng)求訪問(wèn)該ajax請(qǐng)求Url (地址)很多情況下獲取不到ajax請(qǐng)求的數(shù)據(jù),如果用多View去加載,會(huì)加載不到數(shù)據(jù)。又比如,支持html5session storage (HTML5標(biāo)準(zhǔn)版本的會(huì)話存儲(chǔ))的頁(yè)面,html5session storage數(shù)據(jù)不能在多View間共享,如果用多View去加載,雖然也是Get請(qǐng)求(一種HTTP請(qǐng)求),但可能有些頁(yè)面Get請(qǐng)求的參數(shù)是存儲(chǔ)在session storage里,新的WebView拿不到請(qǐng)求參數(shù),可能會(huì)導(dǎo)致頁(yè)面加載不到相應(yīng)的數(shù)據(jù)。因此,不能所有頁(yè)面加載都采用多View策略,需要一定的策略進(jìn)行區(qū)分。由于此策略,使得諸如百度瀏覽器瀏覽模塊的多View策略要明顯優(yōu)于遨游、天天等套殼瀏覽器,具體策略如下:頁(yè)面加載過(guò)程中,注入js (javascript)函數(shù)(即監(jiān)控模塊),通過(guò)注入的js函數(shù)讓頁(yè)面的document, body (文檔的主題)監(jiān)聽onclick (單擊事件)事件(即監(jiān)控模塊監(jiān)聽頁(yè)面中用戶的頁(yè)面點(diǎn)擊事件),這樣就可以檢測(cè)到用戶的頁(yè)面點(diǎn)擊事件。用戶點(diǎn)擊頁(yè)面元素時(shí),該js函數(shù)獲取點(diǎn)擊事件所在的dom節(jié)點(diǎn),從該節(jié)點(diǎn)開始遍歷N層(例如N=3層)父節(jié)點(diǎn)和子節(jié)點(diǎn),如果這些節(jié)點(diǎn)中有標(biāo)簽<a>并且含有href屬性,則說(shuō)明本次操作點(diǎn)擊的是一個(gè)普通Get請(qǐng)求的鏈接。接著,獲取該節(jié)點(diǎn)的href屬性值,href屬性值如果滿足以下條件中的任何一條,則使用單View加載,否則使用多View加載:I)以 javascript 開頭;2)以 # 號(hào)開頭;3) undefined ;4) null。此外,由于頁(yè)面內(nèi)點(diǎn)擊前進(jìn)后退按鈕默認(rèn)會(huì)在頁(yè)面所在的WebView做前進(jìn)后退處理,但以上多View機(jī)制使得要前進(jìn)后退的頁(yè)面可能會(huì)在其它WebView中。因此,該方法通過(guò)引入監(jiān)控模塊,即可通過(guò)注入js函數(shù)(監(jiān)控模塊),重載js的window, history, back、window, history, forward、window, history, go (javascript 腳本語(yǔ)言中的方法)等方法,在js函數(shù)里調(diào)用Android應(yīng)用層的方法來(lái)自行實(shí)現(xiàn)多View的前進(jìn)后退。
·
在上述的示例中,監(jiān)控模塊的實(shí)現(xiàn),即Js注入。首先,在創(chuàng)建webview的時(shí)候,注入一個(gè)Java對(duì)象到Javascript上下文中,例如
表I所示:
二二-二 二 τ '*■、:....、.." "ν二 、二 f 二二'.了 三^二二...wsfc JdLt " 3r
γ...:....~ _.......:. σι............ .....'..-..■" ι....^... 7...Τ '....__ 二 '.■'..■.>..■ *...λ..,7~: ^ TT — .~' — '.7~ ~ ~了-Τ:1_:..、 _Λ 一 _ , , ■ '■..,■.,■._ I_.一 _ ■,一 ■ _ i_ ■.1 ■._ Ib二..■ V__一-丨,J.XaaJ.kb M (!I iui 一.■ ■ _ _表I然后,在網(wǎng)頁(yè)開始繪圖的時(shí)候,例如調(diào)用webview的1adUrl方法,去加載表2中
的文本字符串:
權(quán)利要求
1.一種多網(wǎng)頁(yè)視圖WebView的網(wǎng)頁(yè)瀏覽控制方法,其特征在于,包括以下步驟: 瀏覽器加載頁(yè)面,并在所述頁(yè)面中注入監(jiān)控模塊,其中,所述瀏覽器包括多個(gè)WebView,且在所述瀏覽器的應(yīng)用層中維護(hù)有前進(jìn)后退列表,所述多個(gè)WebView共用所述前進(jìn)后退列表; 所述監(jiān)控模塊檢測(cè)用戶的前進(jìn)或后退操作,并攔截所述前進(jìn)或后退操作;以及 所述監(jiān)控模塊調(diào)用所述前進(jìn)后退列表根據(jù)所述前進(jìn)或后退操作進(jìn)行控制。
2.如權(quán)利要求1所述的方法,其特征在于,還包括: 所述監(jiān)控模塊監(jiān)聽所述頁(yè)面中用戶的頁(yè)面點(diǎn)擊事件;以及 所述監(jiān)控模塊根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。
3.如權(quán)利要求2所述的方法,其特征在于,所述監(jiān)控模塊根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載進(jìn)一步包括: 所述監(jiān)控模塊獲取所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素所在的文件對(duì)象模型DOM節(jié)點(diǎn); 所述監(jiān)控模塊獲取與所述DOM節(jié)點(diǎn)相關(guān)的N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn),其中,N為正整數(shù);以及 所述監(jiān)控模塊根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView 加載。
4.如權(quán)利要求3所述的方法,其特征在于,2< N < 5。·
5.如權(quán)利要求3所述的方法,其特征在于,所述監(jiān)控模塊根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載進(jìn)一步包括: 所述監(jiān)控模塊判斷所述N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)中是否存在標(biāo)簽<a>以及是否含有href屬性; 如果判斷存在標(biāo)簽<a>且含有href屬性,則進(jìn)一步判斷所述href屬性值是否滿足預(yù)設(shè)條件; 如果判斷滿足所述預(yù)設(shè)條件,則啟動(dòng)單個(gè)WebView加載,否則啟動(dòng)多個(gè)WebView加載。
6.如權(quán)利要求5所述的方法,其特征在于,所述預(yù)設(shè)條件為以下條件中的任一條: 以 javascript 開頭、以 # 號(hào)開頭、undefined 和 null。
7.如權(quán)利要求1-6任一項(xiàng)所述的方法,其特征在于,其中,所述前進(jìn)后退列表包括多個(gè)前進(jìn)后退表項(xiàng),每個(gè)所述前進(jìn)后退表項(xiàng)包括頁(yè)面的地址信息、使用加載所用的WebView以及所述頁(yè)面在所述WebView中如進(jìn)后退列表中的位直。
8.如權(quán)利要求1-7任一項(xiàng)所述的方法,其特征在于,還包括: 在頁(yè)面開始加載的回調(diào)接口 onPageStarted中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面位置的下一位; 在開始加載頁(yè)面資源的回調(diào)接口 onLoadResource中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置,其中,所述頁(yè)面的Url為對(duì)應(yīng)WebView當(dāng)前頁(yè)面的Url ; 在頁(yè)面結(jié)束加載的回調(diào)接口 onPageFinished中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置。
9.如權(quán)利要求8所述的方法,其特征在于,還包括:更新所述瀏覽器的應(yīng)用層中的前進(jìn)后退列表。
10.如權(quán)利要求1所述的方法,其特征在于,所述監(jiān)控模塊調(diào)用所述前進(jìn)后退列表根據(jù)所述前進(jìn)或后退操作進(jìn)行控制進(jìn)一步包括: 根據(jù)所述前進(jìn)后退列表獲取所述前進(jìn)后退列表中的當(dāng)前前進(jìn)后退表項(xiàng)以及目標(biāo)前進(jìn)后退表項(xiàng);以及 對(duì)所述當(dāng)前前進(jìn)后退表項(xiàng)和目標(biāo)前進(jìn)后退表項(xiàng)進(jìn)行校驗(yàn),并根據(jù)校驗(yàn)結(jié)果進(jìn)行控制。
11.如權(quán)利要求1所述的方法,其特征在于,還包括: 創(chuàng)建并維護(hù)WebView池,其中,當(dāng)所述WebView池中WebView的個(gè)數(shù)小于第一預(yù)設(shè)數(shù)值時(shí),則創(chuàng)建至少一個(gè)WebView。
12.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述WebView池中WebView的個(gè)數(shù)大于第二預(yù)設(shè)數(shù)值時(shí),則對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。
13.如權(quán)利要求12所述的方法,其特征在于,根據(jù)頁(yè)面類型和窗口類型對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。
14.如權(quán)利要求13所述的方法,其特征在于, 對(duì)于單窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則銷毀該窗口對(duì)應(yīng)的個(gè)WebView ; 對(duì)于單窗口,如果當(dāng)前頁(yè)面 為小頁(yè)面,則銷毀該窗口對(duì)應(yīng)的個(gè)WebView ; 對(duì)于多窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則銷毀個(gè)WebView ;以及 對(duì)于多窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則銷毀個(gè)WebView。
15.—種瀏覽器,其特征在于,包括 多個(gè) WebView ; 前進(jìn)后退列表維護(hù)模塊,用于在所述瀏覽器的應(yīng)用層中維護(hù)前進(jìn)后退列表,其中,所述多個(gè)WebView共用所述前進(jìn)后退列表; 加載模塊,用于加載頁(yè)面,并在所述頁(yè)面中注入監(jiān)控模塊; 所述監(jiān)控模塊,用于檢測(cè)用戶的前進(jìn)或后退操作,并攔截所述前進(jìn)或后退操作,以及調(diào)用所述前進(jìn)后退列表根據(jù)所述前進(jìn)或后退操作進(jìn)行控制。
16.如權(quán)利要求15所述的瀏覽器,其特征在于,所述監(jiān)控模塊,還用于監(jiān)聽所述頁(yè)面中用戶的頁(yè)面點(diǎn)擊事件,并根據(jù)所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。
17.如權(quán)利要求16所述的瀏覽器,其特征在于,所述監(jiān)控模塊獲取所述頁(yè)面點(diǎn)擊事件對(duì)應(yīng)的頁(yè)面元素所在的文件對(duì)象模型DOM節(jié)點(diǎn),并獲取與所述DOM節(jié)點(diǎn)相關(guān)的N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn),其中,N為正整數(shù),以及根據(jù)N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)判斷啟動(dòng)單個(gè)WebView加載或多個(gè)WebView加載。
18.如權(quán)利要求17所述的瀏覽器,其特征在于,2< N < 5。
19.如權(quán)利要求17所述的瀏覽器,其特征在于,所述監(jiān)控模塊在判斷所述N層DOM父節(jié)點(diǎn)和DOM子節(jié)點(diǎn)中存在標(biāo)簽<a>且含有href屬性時(shí),進(jìn)一步判斷所述href屬性值是否滿足預(yù)設(shè)條件,且在判斷滿足所述預(yù)設(shè)條件之后啟動(dòng)單個(gè)WebView加載,否則啟動(dòng)多個(gè)WebView加載。
20.如權(quán)利要求19所述的瀏覽器,其特征在于,所述預(yù)設(shè)條件為以下條件中的任一條: 以 javascript 開頭、以 # 號(hào)開頭、undefined 和 null。
21.如權(quán)利要求15所述的瀏覽器,其特征在于,其中,所述前進(jìn)后退列表包括多個(gè)前進(jìn)后退表項(xiàng),每個(gè)所述前進(jìn)后退表項(xiàng)包括頁(yè)面的地址信息、使用加載所用的WebView以及所述頁(yè)面在所述WebView中前進(jìn)后退列表中的位置。
22.如權(quán)利要求15所述的瀏覽器,其特征在于,所述前進(jìn)后退列表維護(hù)模塊還用于: 在頁(yè)面開始加載的回調(diào)接口 onPageStarted中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面位置的下一位; 在開始加載頁(yè)面資源的回調(diào)接口 onLoadResource中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置,其中,所述頁(yè)面的Url為對(duì)應(yīng)WebView當(dāng)前頁(yè)面的Url ; 在頁(yè)面結(jié)束加載的回調(diào)接口 onPageFinished中增加新的前進(jìn)后退項(xiàng),并將所述頁(yè)面在對(duì)應(yīng)WebView本身前進(jìn)后退列表里的位置設(shè)為所述WebView當(dāng)前頁(yè)面的位置。
23.如權(quán)利要求22所述的瀏覽器,其特征在于,所述前進(jìn)后退列表維護(hù)模塊還用于更新所述瀏覽器的應(yīng)用層中的前進(jìn)后退列表。
24.如權(quán)利要求15所述的瀏覽器,其特征在于,所述監(jiān)控模塊還用于根據(jù)所述前進(jìn)后退列表獲取所述前進(jìn)后退列表中的當(dāng)前前進(jìn)后退表項(xiàng)以及目標(biāo)前進(jìn)后退表項(xiàng),并對(duì)所述當(dāng)iu iu進(jìn)后退表項(xiàng)和目標(biāo)如進(jìn)后退表項(xiàng)進(jìn)行校驗(yàn)。
25.如權(quán)利要求15所述的瀏覽器,其特征在于,還包括: WebView池維護(hù)模塊,用于創(chuàng)建并維護(hù)WebView池,其中,當(dāng)所述WebView池中WebView的個(gè)數(shù)小于第一預(yù) 設(shè)數(shù)值時(shí),則創(chuàng)建至少一個(gè)WebView。
26.如權(quán)利要求25所述的瀏覽器,其特征在于,當(dāng)所述WebView池中WebView的個(gè)數(shù)大于第二預(yù)設(shè)數(shù)值時(shí),所述WebView池維護(hù)模塊對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。
27.如權(quán)利要求26所述的瀏覽器,其特征在于,所述WebView池維護(hù)模塊根據(jù)頁(yè)面類型和窗口類型對(duì)所述WebView池中至少部分的WebView進(jìn)行回收。
28.如權(quán)利要求26所述的瀏覽器,其特征在于, 對(duì)于單窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則所述WebView池維護(hù)模塊銷毀該窗口對(duì)應(yīng)的個(gè) WebView ; 對(duì)于單窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則所述WebView池維護(hù)模塊銷毀該窗口對(duì)應(yīng)的個(gè) WebView ; 對(duì)于多窗口,如果當(dāng)前頁(yè)面為大頁(yè)面,則所述WebView池維護(hù)模塊銷毀個(gè)WebView ;以及對(duì)于多窗口,如果當(dāng)前頁(yè)面為小頁(yè)面,則所述WebView池維護(hù)模塊銷毀個(gè)WebView。
全文摘要
本發(fā)明提出了一種多WebView(網(wǎng)頁(yè)視圖)的網(wǎng)頁(yè)瀏覽控制方法,包括以下步驟瀏覽器加載頁(yè)面,并在頁(yè)面中注入監(jiān)控模塊,其中,瀏覽器包括多個(gè)WebView,且在瀏覽器的應(yīng)用層中維護(hù)有前進(jìn)后退列表,多個(gè)WebView共用前進(jìn)后退列表;監(jiān)控模塊檢測(cè)用戶的前進(jìn)或后退操作,并攔截前進(jìn)或后退操作;監(jiān)控模塊調(diào)用前進(jìn)后退列表根據(jù)前進(jìn)或后退操作進(jìn)行控制。根據(jù)本發(fā)明實(shí)施例的方法,可減少客戶端安裝包大小,并采用多WebView瀏覽網(wǎng)頁(yè),提高網(wǎng)頁(yè)瀏覽過(guò)程中前進(jìn)后退速度,并可以記住瀏覽歷史的網(wǎng)頁(yè)的位置。本發(fā)明還提出了一種瀏覽器。
文檔編號(hào)G06F17/30GK103246739SQ20131018254
公開日2013年8月14日 申請(qǐng)日期2013年5月16日 優(yōu)先權(quán)日2013年5月16日
發(fā)明者龔海平 申請(qǐng)人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司