本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種恢復(fù)瀏覽器中頁(yè)面的方法及其裝置。
背景技術(shù):
現(xiàn)在隨著使用智能手機(jī)人群越來(lái)越多、wifi的覆蓋范圍不斷擴(kuò)大和手機(jī)網(wǎng)絡(luò)不斷增速,通過(guò)手機(jī)瀏覽器瀏覽網(wǎng)頁(yè)獲取信息已成為人們?nèi)粘I畹囊徊糠?。隨著HTML5推廣,手機(jī)瀏覽器的體驗(yàn)越來(lái)越好,使用頻率也將越來(lái)越高。
然而,現(xiàn)有基于CrossWalk內(nèi)核的瀏覽器存在以下弊端:基于CrossWalk內(nèi)核的瀏覽器緩存機(jī)制只是緩存頁(yè)面的圖像資源,并未對(duì)主資源和javascript腳本進(jìn)行緩存,導(dǎo)致瀏覽過(guò)程中,用戶點(diǎn)擊后退或前進(jìn)時(shí),網(wǎng)頁(yè)的主資源需要重新加載和解析,javascript腳本也需要重新加載和解釋?zhuān)瑥亩绊戫?yè)面顯示速度,甚至出現(xiàn)回到頁(yè)面的開(kāi)頭,未能顯示到之前瀏覽的位置的問(wèn)題,極大的影響了用戶體驗(yàn)。而緩存了主資源,但并未對(duì)javascript腳本做相關(guān)緩存的話,對(duì)與一些含有javascript腳本的網(wǎng)頁(yè),則會(huì)出現(xiàn)網(wǎng)頁(yè)的一些事件丟失問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明實(shí)施例提供了一種恢復(fù)瀏覽器中頁(yè)面的方法及其裝置。所述技術(shù)方案如下:
一方面,一種恢復(fù)瀏覽器中頁(yè)面的方法,包括以下步驟:
瀏覽器接收指令,打開(kāi)頁(yè)面一;
瀏覽器接收指令,存儲(chǔ)頁(yè)面一的腳本狀態(tài)數(shù)據(jù),離開(kāi)頁(yè)面一,打開(kāi)頁(yè)面二;
瀏覽器接收指令,存儲(chǔ)頁(yè)面二的腳本狀態(tài)數(shù)據(jù),離開(kāi)頁(yè)面二,重新打開(kāi)頁(yè)面一,恢復(fù)頁(yè)面一的腳本運(yùn)行。
進(jìn)一步的,瀏覽器接收指令,存儲(chǔ)頁(yè)面一的腳本狀態(tài)數(shù)據(jù),離開(kāi)頁(yè)面一,打開(kāi)頁(yè)面二的具體步驟包括:
瀏覽器接收指令,建立鏈表;
將頁(yè)面一的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)存儲(chǔ)在鏈表中;
瀏覽器離開(kāi)頁(yè)面一;打開(kāi)頁(yè)面二。
進(jìn)一步的,瀏覽器接收指令,存儲(chǔ)頁(yè)面二的腳本狀態(tài)數(shù)據(jù),離開(kāi)頁(yè)面二,重新打開(kāi)頁(yè)面一,恢復(fù)頁(yè)面一的腳本運(yùn)行的具體步驟包括以下步驟:
瀏覽器接收指令,將頁(yè)面二的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)存儲(chǔ)在已經(jīng)存儲(chǔ)了頁(yè)面一的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)的鏈表中;
瀏覽器離開(kāi)頁(yè)面二,重新打開(kāi)頁(yè)面一;
瀏覽器讀取鏈表中的信息,查找是否包含頁(yè)面一的統(tǒng)一資源定位符;
如果包含頁(yè)面一的統(tǒng)一資源定位符,則得到頁(yè)面一的腳本狀態(tài)數(shù)據(jù),將頁(yè)面一的腳本狀態(tài)數(shù)據(jù)通過(guò)相關(guān)接口設(shè)置到瀏覽器中,恢復(fù)頁(yè)面一的腳本運(yùn)行;
如果未包含頁(yè)面一的統(tǒng)一資源定位符,則所述鏈表中沒(méi)有頁(yè)面一的腳本狀態(tài)數(shù)據(jù),瀏覽器重新加載頁(yè)面一的腳本狀態(tài)數(shù)據(jù),解析并運(yùn)行頁(yè)面一的腳本。
可選的,恢復(fù)瀏覽器中頁(yè)面的方法還包括:當(dāng)瀏覽器頁(yè)打開(kāi)頁(yè)面?zhèn)€數(shù)超過(guò)鏈表設(shè)定長(zhǎng)度或?yàn)g覽器退出時(shí),鏈表清除數(shù)據(jù)已被緩存的標(biāo)志,調(diào)用釋放的接口,釋放已緩存的數(shù)據(jù)。
另一方面,一種恢復(fù)瀏覽器中頁(yè)面的裝置,包括:
頁(yè)面數(shù)據(jù)存儲(chǔ)模塊,用于存儲(chǔ)瀏覽器中頁(yè)面的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù);
頁(yè)面數(shù)據(jù)恢復(fù)模塊,與頁(yè)面數(shù)據(jù)存儲(chǔ)模塊連接,用于恢復(fù)瀏覽器中頁(yè)面的腳本狀態(tài)數(shù)據(jù)。
進(jìn)一步的,頁(yè)面數(shù)據(jù)恢復(fù)模塊包括:
頁(yè)面統(tǒng)一資源定位符查找模塊,與頁(yè)面數(shù)據(jù)存儲(chǔ)模塊連接,用于查找頁(yè)面數(shù)據(jù)存儲(chǔ)模塊中是否包含要恢復(fù)頁(yè)面的統(tǒng)一資源定位符;
頁(yè)面腳本狀態(tài)數(shù)據(jù)恢復(fù)模塊,與頁(yè)面統(tǒng)一資源定位符查找模塊連接,用于恢復(fù)頁(yè)面腳本狀態(tài)數(shù)據(jù),恢復(fù)腳本運(yùn)行。
可選的,恢復(fù)瀏覽器中頁(yè)面的裝置還包括頁(yè)面數(shù)據(jù)釋放模塊,與頁(yè)面數(shù)據(jù)存儲(chǔ)模塊連接,用于釋放頁(yè)面數(shù)據(jù)存儲(chǔ)模塊中存儲(chǔ)的數(shù)據(jù)。
再一方面,一種瀏覽器,包括上述的恢復(fù)瀏覽器中頁(yè)面的裝置。
再一方面,一種裝置,包括上述瀏覽器。
進(jìn)一步的,裝置包括:手機(jī)、平板電腦、筆記本電腦、臺(tái)式電腦、電子書(shū)閱讀器、游戲主機(jī)和網(wǎng)絡(luò)機(jī)頂盒。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:本發(fā)明主要針對(duì)當(dāng)前瀏覽器大多只緩存了網(wǎng)頁(yè)主資源,卻未對(duì)javascript腳本做相關(guān)的緩存,導(dǎo)致出現(xiàn)網(wǎng)頁(yè)事件丟失等問(wèn)題,提出一種解決如何緩存基于CrossWalk內(nèi)核的瀏覽器V8引擎中javascript內(nèi)容和狀態(tài),以及狀態(tài)恢復(fù)的方法。本發(fā)明的方法能夠有效提升頁(yè)面的恢復(fù)速度,防止網(wǎng)頁(yè)事件丟失,提升用戶瀏覽體驗(yàn)。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例一提供的恢復(fù)瀏覽器中頁(yè)面的方法流程圖;
圖2是本發(fā)明實(shí)施例一提供的恢復(fù)瀏覽器中頁(yè)面的方法流程圖;
圖3是本發(fā)明實(shí)施例二提供的恢復(fù)瀏覽器中頁(yè)面的裝置結(jié)構(gòu)圖;
圖4是本發(fā)明實(shí)施例二提供的恢復(fù)瀏覽器中頁(yè)面的裝置結(jié)構(gòu)圖;
圖5是本發(fā)明實(shí)施例二提供的恢復(fù)瀏覽器中頁(yè)面的裝置結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
實(shí)施例一
本發(fā)明提供一種恢復(fù)瀏覽器中頁(yè)面的方法,如圖1所示。包括以下步驟:首先進(jìn)行步驟S101,瀏覽器接收指令,打開(kāi)頁(yè)面一;然后進(jìn)行步驟S102,瀏覽器接收指令,存儲(chǔ)頁(yè)面一的腳本狀態(tài)(ScriptState)數(shù)據(jù),離開(kāi)頁(yè)面一,打開(kāi)頁(yè)面二;再進(jìn)行S103,瀏覽器接收指令,存儲(chǔ)頁(yè)面二的腳本狀態(tài)數(shù)據(jù),離開(kāi)頁(yè)面二,重新打開(kāi)頁(yè)面一,恢復(fù)頁(yè)面一的腳本運(yùn)行。
具體的,如圖2所示:
步驟S201,瀏覽器接收指令,打開(kāi)頁(yè)面一,加載圖像、鏈接、音樂(lè)等頁(yè)面內(nèi)容。
步驟S202,瀏覽器接收指令,建立鏈表。鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù)域,另一個(gè)是存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址的指針域。本實(shí)施例中的鏈表建立在頁(yè)高速緩沖存儲(chǔ)器(PageCache)類(lèi)里,用于存儲(chǔ)瀏覽器中打開(kāi)的頁(yè)面的統(tǒng)一資源定位符(URL)和腳本狀態(tài)數(shù)據(jù),該鏈表結(jié)構(gòu)包括歷史項(xiàng)目(HistoryItem)和緩存頁(yè)面(CachedPage)。
步驟S203,將頁(yè)面一的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)存儲(chǔ)在鏈表中。
步驟S204,瀏覽器離開(kāi)頁(yè)面一。在本實(shí)施例中,離開(kāi)頁(yè)面一包括下述兩種情況:(1)在頁(yè)面一上打開(kāi)頁(yè)面二,由頁(yè)面一直接進(jìn)入頁(yè)面二;(2)關(guān)閉頁(yè)面一。
步驟S205,瀏覽器打開(kāi)頁(yè)面二,加載頁(yè)面二的圖像、鏈接、音樂(lè)等頁(yè)面內(nèi)容。
步驟S206,瀏覽器接收指令,將頁(yè)面二的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)存儲(chǔ)在已經(jīng)存儲(chǔ)了頁(yè)面一的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)的鏈表中。如果瀏覽器繼續(xù)打開(kāi)頁(yè)面三或更多的頁(yè)面,也需將這些頁(yè)面的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)存儲(chǔ)在前述的鏈表中。
步驟S207,瀏覽器離開(kāi)頁(yè)面二,重新打開(kāi)頁(yè)面一。本實(shí)施例中,重新打開(kāi)頁(yè)面一包括以下兩種情況:(1)當(dāng)瀏覽器從頁(yè)面一進(jìn)入的頁(yè)面二后,接收到后退指令;(2)瀏覽器已經(jīng)關(guān)閉頁(yè)面一后,又接收到重新打開(kāi)頁(yè)面一指令。
步驟S208,瀏覽器讀取鏈表中的信息,查找是否包含頁(yè)面一的統(tǒng)一資源定位符。瀏覽器重新打開(kāi)頁(yè)面一時(shí),從前述的鏈表中查找是否包含頁(yè)面一的統(tǒng)一資源定位符。如果包含頁(yè)面一的統(tǒng)一資源定位符,表明鏈表中存在頁(yè)面一的腳本狀態(tài)數(shù)據(jù),則進(jìn)行步驟S209;如果未包含頁(yè)面一的統(tǒng)一資源定位符,則鏈表中沒(méi)有頁(yè)面一的腳本狀態(tài)數(shù)據(jù),那么進(jìn)行步驟S210。
步驟S209,得到頁(yè)面一的腳本狀態(tài)數(shù)據(jù),將頁(yè)面一的腳本狀態(tài)數(shù)據(jù)通過(guò)相關(guān)接口設(shè)置到瀏覽器中,恢復(fù)腳本運(yùn)行。根據(jù)頁(yè)面一的統(tǒng)一資源定位符,從鏈表中找到相應(yīng)的頁(yè)面一的腳本狀態(tài)數(shù)據(jù),將該數(shù)據(jù)通過(guò)腳本狀態(tài)保存設(shè)置(setSaveScriptState)接口,設(shè)置到瀏覽器中,恢復(fù)頁(yè)面一的腳本運(yùn)行。當(dāng)瀏覽器從頁(yè)面一再次進(jìn)入頁(yè)面二時(shí),可同樣從鏈表中查找頁(yè)面二的統(tǒng)一資源定位符進(jìn)而得到頁(yè)面二的腳本狀態(tài)數(shù)據(jù),將頁(yè)面二的腳本狀態(tài)數(shù)據(jù)通過(guò)腳本狀態(tài)保存設(shè)置接口,設(shè)置到瀏覽器中,恢復(fù)頁(yè)面二的腳本運(yùn)行。
步驟S210,瀏覽器重新加載頁(yè)面一的腳本狀態(tài)數(shù)據(jù),解析并運(yùn)行頁(yè)面一的腳本。
本方法還包括步驟S211,當(dāng)瀏覽器頁(yè)打開(kāi)頁(yè)面?zhèn)€數(shù)超過(guò)鏈表設(shè)定長(zhǎng)度或?yàn)g覽器退出時(shí),鏈表清除數(shù)據(jù)已被緩存的標(biāo)志,調(diào)用釋放的接口,釋放已緩存的數(shù)據(jù)。
本發(fā)明提出一種解決如何緩存基于CrossWalk內(nèi)核的瀏覽器V8引擎中javascript內(nèi)容和狀態(tài),以及狀態(tài)恢復(fù)的方法。當(dāng)用戶恢復(fù)之前瀏覽的頁(yè)面時(shí),能夠有效提升頁(yè)面的恢復(fù)速度,防止網(wǎng)頁(yè)事件丟失,提升用戶瀏覽體驗(yàn)。
實(shí)施例二
本發(fā)明還提供一種恢復(fù)瀏覽器中頁(yè)面的裝置如圖3所示,包括頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100和頁(yè)面數(shù)據(jù)恢復(fù)模塊200。頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100用于存儲(chǔ)瀏覽器中頁(yè)面的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)。頁(yè)面數(shù)據(jù)恢復(fù)模塊200與頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100連接,用于恢復(fù)瀏覽器中頁(yè)面的腳本狀態(tài)數(shù)據(jù)。
具體的,如圖4所示,頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100一般為鏈表,當(dāng)瀏覽器打開(kāi)一個(gè)新的頁(yè)面時(shí),可以將頁(yè)面的統(tǒng)一資源定位符和腳本狀態(tài)數(shù)據(jù)一一對(duì)應(yīng)的存儲(chǔ)在鏈表中。
頁(yè)面數(shù)據(jù)恢復(fù)模塊200包括:頁(yè)面統(tǒng)一資源定位符查找模塊201和頁(yè)面腳本狀態(tài)數(shù)據(jù)恢復(fù)模塊202。
頁(yè)面統(tǒng)一資源定位符查找模塊201與頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100連接,用于查找頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中是否包含要恢復(fù)頁(yè)面的統(tǒng)一資源定位符。當(dāng)瀏覽器接到前進(jìn)、后退或恢復(fù)頁(yè)面的指令,需要重新打開(kāi)之前打開(kāi)過(guò)的頁(yè)面時(shí),頁(yè)面統(tǒng)一資源定位符查找模塊201從頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中查找是否包含該頁(yè)面的統(tǒng)一資源定位符。如果頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中包含該頁(yè)面的統(tǒng)一資源定位符,則說(shuō)明頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中包含該頁(yè)面的腳本狀態(tài)數(shù)據(jù);如果頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中未包含該頁(yè)面的統(tǒng)一資源定位符,則說(shuō)明頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中不包含該頁(yè)面的腳本狀態(tài)數(shù)據(jù)。
頁(yè)面腳本狀態(tài)數(shù)據(jù)恢復(fù)模塊202與頁(yè)面統(tǒng)一資源定位符查找模塊201連接,用于恢復(fù)頁(yè)面腳本狀態(tài)數(shù)據(jù),恢復(fù)腳本運(yùn)行。通過(guò)頁(yè)面統(tǒng)一資源定位符查找模塊201在頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中查詢后得到結(jié)果,如果頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中包含重新打開(kāi)頁(yè)面的腳本狀態(tài)數(shù)據(jù),則從頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中調(diào)取重新打開(kāi)頁(yè)面的腳本狀態(tài)數(shù)據(jù),通過(guò)相關(guān)接口,將該腳本狀態(tài)數(shù)據(jù)設(shè)置到瀏覽器中,恢復(fù)腳本運(yùn)行;如果頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中沒(méi)有重新打開(kāi)頁(yè)面的腳本狀態(tài)數(shù)據(jù),則瀏覽器重新創(chuàng)建重新打開(kāi)頁(yè)面的腳本狀態(tài)數(shù)據(jù),恢復(fù)腳本運(yùn)行。
如圖5所示,可選的,恢復(fù)瀏覽器中頁(yè)面的裝置還包括頁(yè)面數(shù)據(jù)釋放模塊300。頁(yè)面數(shù)據(jù)釋放模塊300與頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100連接,用于釋放頁(yè)面數(shù)據(jù)存儲(chǔ)模塊100中存儲(chǔ)的數(shù)據(jù)。當(dāng)瀏覽器頁(yè)打開(kāi)頁(yè)面?zhèn)€數(shù)超過(guò)鏈表設(shè)定長(zhǎng)度或?yàn)g覽器退出時(shí),鏈表釋放存儲(chǔ)的數(shù)據(jù),清除已被緩存的標(biāo)志,調(diào)用釋放的接口,釋放已緩存的數(shù)據(jù)。
實(shí)施例三
本發(fā)明還提供一種瀏覽器,該瀏覽器包括圖3所示的裝置。在本實(shí)施例中瀏覽器可以是CrossWalk內(nèi)核V8引擎,也可以是其他使用V8引擎的瀏覽器,本發(fā)明對(duì)此不作限制。該瀏覽器能夠在網(wǎng)頁(yè)關(guān)閉時(shí)緩存網(wǎng)頁(yè)javascript內(nèi)容和狀態(tài),并在網(wǎng)頁(yè)再次打開(kāi)時(shí)恢復(fù)緩存的網(wǎng)頁(yè)javascript內(nèi)容和狀態(tài)。從而使得用戶在恢復(fù)之前瀏覽的頁(yè)面時(shí),有效提升頁(yè)面的恢復(fù)速度,防止網(wǎng)頁(yè)事件丟失,提升用戶瀏覽體驗(yàn)。
實(shí)施例四
本發(fā)明還提供一種裝置,該裝置包括含有圖3所示裝置的瀏覽器。在本實(shí)施例中,該裝置可以是手機(jī)、平板電腦、筆記本電腦、臺(tái)式電腦、電子書(shū)閱讀器、游戲主機(jī)或網(wǎng)絡(luò)機(jī)頂盒中的任一種,本發(fā)明對(duì)此不作限定。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤(pán)等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。