網(wǎng)頁保存的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本公開涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及網(wǎng)頁保存的方法及裝置。
【背景技術(shù)】
[0002]在互聯(lián)網(wǎng)如此發(fā)達(dá)的今天,人們幾乎每天都會瀏覽網(wǎng)頁,通過網(wǎng)頁獲知各種信息,有時,我們打開某個或某些網(wǎng)頁后,由于沒有時間看完,而網(wǎng)頁的信息對我們很重要或很感興趣,需要等到有時間的時候再仔細(xì)看,這時就需要將網(wǎng)頁保存起來,然后通過重新加載網(wǎng)頁將網(wǎng)頁的內(nèi)容還原。
[0003]網(wǎng)頁保存的過程主要是對網(wǎng)頁內(nèi)容的序列化過程。網(wǎng)頁的保存過程中,由于JS腳本的執(zhí)行,產(chǎn)生了各種JS變量。這些變量在未來的腳本執(zhí)行過程中起著重要的作用。而當(dāng)前的網(wǎng)頁保存方式由于JS變量未能得到保存,導(dǎo)致被保存的頁面重新加載后,經(jīng)常出現(xiàn)各種不正常的狀況。
【發(fā)明內(nèi)容】
[0004]為克服相關(guān)技術(shù)中存在的問題,本公開實施例提供網(wǎng)頁的保存方法及裝置,能夠在網(wǎng)頁保存的同時保存程序執(zhí)行過程中產(chǎn)生的各種變量,從而可有效避免保存的網(wǎng)頁重新加載時出現(xiàn)不正常的狀況。
[0005]根據(jù)本公開實施例的第一方面,提供一種網(wǎng)頁保存方法,包括:
[0006]獲取網(wǎng)頁的節(jié)點樹對應(yīng)的JS環(huán)境,并獲取所述JS環(huán)境關(guān)聯(lián)的全局對象;
[0007]根據(jù)所述全局對象、序列化規(guī)則、預(yù)設(shè)的引用表和預(yù)設(shè)的映射表,生成預(yù)設(shè)格式對象,其中,所述引用表中包括所述預(yù)設(shè)格式對象的屬性與唯一標(biāo)識的對應(yīng)關(guān)系,所述映射表中包括所述唯一標(biāo)識與屬性值地址的對應(yīng)關(guān)系;
[0008]將所述引用表和所述預(yù)設(shè)格式對象合并,生成所述網(wǎng)頁的預(yù)設(shè)格式文件。
[0009]在一個實施例中,所述根據(jù)所述全局對象、序列化規(guī)則、預(yù)設(shè)的引用表和預(yù)設(shè)的映射表,生成預(yù)設(shè)格式對象,可包括:
[0010]當(dāng)所述全局對象的屬性的類型為內(nèi)置類型、數(shù)組型或空型時,將所述屬性的屬性值轉(zhuǎn)換為所述預(yù)設(shè)格式的屬性值,根據(jù)所述預(yù)設(shè)格式的屬性值生成預(yù)設(shè)格式對象;
[0011]當(dāng)所述全局對象的屬性的類型為函數(shù)型時,將所述屬性的函數(shù)體轉(zhuǎn)換為字符串,并加上預(yù)設(shè)函數(shù)前綴,根據(jù)加上所述預(yù)設(shè)函數(shù)前綴的字符串生成預(yù)設(shè)格式對象;
[0012]當(dāng)所述全局對象的屬性的類型為對象型時,判斷所述屬性的屬性值的地址是否存在于所述映射表中,當(dāng)存在時,根據(jù)所述引用表將所述屬性值序列化為所述引用表的索引信息,根據(jù)所述索引信息和所述屬性的名稱生成預(yù)設(shè)格式對象;當(dāng)不存在時,根據(jù)所述屬性值將所述屬性轉(zhuǎn)換為預(yù)設(shè)格式對象的屬性,為所述預(yù)設(shè)格式對象的屬性設(shè)置唯一標(biāo)識,并將所述唯一標(biāo)識和所述預(yù)設(shè)格式對象的屬性加入所述引用表中,并根據(jù)所述引用表將所述屬性值序列化為所述引用表的索引信息,根據(jù)所述索引信息和所述屬性的名稱生成預(yù)設(shè)格式對象。
[0013]在一個實施例中,所述預(yù)設(shè)格式可以為JS0N格式。
[0014]在一個實施例中,上述方法還可包括:
[0015]讀取所述網(wǎng)頁的預(yù)設(shè)格式文件,獲得所述預(yù)設(shè)格式對象;
[0016]根據(jù)所述預(yù)設(shè)格式對象、反序列化規(guī)則、所述映射表和所述引用表,生成全局對象;
[0017]根據(jù)所述全局對象創(chuàng)建JS環(huán)境;
[0018]利用所述JS環(huán)境創(chuàng)建節(jié)點樹。
[0019]在一個實施例中,所述根據(jù)所述預(yù)設(shè)格式對象、反序列化規(guī)則、所述映射表和所述引用表,生成全局對象,可包括:
[0020]當(dāng)所述預(yù)設(shè)格式對象的屬性的屬性值為數(shù)值、空值、布爾值、數(shù)組或不帶前綴的字符串時,將所述屬性值轉(zhuǎn)換為JS值,根據(jù)所述屬性的名稱和轉(zhuǎn)換為JS值的屬性值生成全局對象;
[0021]當(dāng)所述預(yù)設(shè)格式對象的屬性的屬性值為帶預(yù)設(shè)函數(shù)前綴的字符串時,將該字符串作為函數(shù)體轉(zhuǎn)換為JS函數(shù),根據(jù)所述屬性的名稱和所述JS函數(shù)生成全局對象;
[0022]當(dāng)所述預(yù)設(shè)格式對象的屬性的屬性值為帶所述引用表索引信息前綴的字符串時,將該字符串作為唯一標(biāo)識,判斷該字符串是否存在于所述映射表中;當(dāng)存在時,根據(jù)所述映射表獲取所述屬性的屬性值地址,根據(jù)所述引用表獲取該字符串對應(yīng)的預(yù)設(shè)格式對象的屬性,根據(jù)所述屬性的屬性值地址和所述屬性的名稱生成全局對象;當(dāng)不存在時,創(chuàng)建一全局對象的屬性,在所述引用表中查找該字符串對應(yīng)的預(yù)設(shè)格式對象的屬性,根據(jù)該字符串對應(yīng)的預(yù)設(shè)格式對象的屬性和所述創(chuàng)建的全局對象的屬性,將該字符串和該字符串對應(yīng)的屬性值地址加入映射表中,并根據(jù)該屬性的名稱和屬性值地址生成全局對象。
[0023]根據(jù)本公開實施例的第二方面,提供一種網(wǎng)頁保存的裝置,包括:
[0024]獲取模塊,用于獲取網(wǎng)頁的節(jié)點樹對應(yīng)的JS環(huán)境,并獲取所述JS環(huán)境關(guān)聯(lián)的全局對象;
[0025]第一生成模塊,用于根據(jù)所述全局對象、序列化規(guī)則、預(yù)設(shè)的引用表和預(yù)設(shè)的映射表,生成預(yù)設(shè)格式對象,其中,所述引用表中包括所述預(yù)設(shè)格式對象的屬性與唯一標(biāo)識的對應(yīng)關(guān)系,所述映射表中包括所述唯一標(biāo)識與屬性值地址的對應(yīng)關(guān)系;
[0026]合并模塊,用于將所述引用表和所述預(yù)設(shè)格式對象合并,生成所述網(wǎng)頁的預(yù)設(shè)格式文件。
[0027]在一個實施例中,所述第一生成模塊可包括:
[0028]第一生成子模塊,用于當(dāng)所述全局對象的屬性的類型為內(nèi)置類型、數(shù)組型或空型時,將所述屬性的屬性值轉(zhuǎn)換為所述預(yù)設(shè)格式的屬性值,根據(jù)所述預(yù)設(shè)格式的屬性值生成預(yù)設(shè)格式對象;
[0029]第二生成子模塊,用于當(dāng)所述全局對象的屬性的類型為函數(shù)型時,將所述屬性的函數(shù)體轉(zhuǎn)換為字符串,并加上預(yù)設(shè)函數(shù)前綴,根據(jù)加上所述預(yù)設(shè)函數(shù)前綴的字符串生成預(yù)設(shè)格式對象;
[0030]第三生成子模塊,用于當(dāng)所述全局對象的屬性的類型為對象型時,判斷所述屬性的屬性值的地址是否存在于所述映射表中,當(dāng)存在時,根據(jù)所述引用表將所述屬性值序列化為所述引用表的索引信息,根據(jù)所述索引信息和所述屬性的名稱生成預(yù)設(shè)格式對象;當(dāng)不存在時,根據(jù)所述屬性值將所述屬性轉(zhuǎn)換為預(yù)設(shè)格式對象的屬性,為所述預(yù)設(shè)格式對象的屬性設(shè)置唯一標(biāo)識,并將所述唯一標(biāo)識和所述預(yù)設(shè)格式對象的屬性加入所述引用表中,并根據(jù)所述引用表將所述屬性值序列化為所述引用表的索引信息,根據(jù)所述索引信息和所述屬性的名稱生成預(yù)設(shè)格式對象。
[0031]在一個實施例中,所述預(yù)設(shè)格式可以為JS0N格式。
[0032]在一個實施例中,上述裝置還可包括:
[0033]讀取模塊,用于讀取所述網(wǎng)頁的預(yù)設(shè)格式文件,獲得所述預(yù)設(shè)格式對象;
[0034]第二生成模塊,用于根據(jù)所述預(yù)設(shè)格式對象、反序列化規(guī)則、所述映射表和所述引用表,生成全局對象;
[0035]第一創(chuàng)建模塊,用于根據(jù)所述全局對象創(chuàng)建JS環(huán)境;
[0036]第二創(chuàng)建模塊,用于利用所述JS環(huán)境創(chuàng)建節(jié)點樹。
[0037]在一個實施例中,所述第二生成模塊可包括:
[0038]第四生成子模塊,用于當(dāng)所述預(yù)設(shè)格式對象的屬性的屬性值為數(shù)值、空值、布爾值、數(shù)組或不帶前綴的字符串時,將所述屬性值轉(zhuǎn)換為JS值,根據(jù)所述屬性的名稱和轉(zhuǎn)換為JS值的屬性值生成全局對象;
[0039]第五生成子模塊,用于當(dāng)所述預(yù)設(shè)格式對象的屬性的屬性值為帶預(yù)設(shè)函數(shù)前綴的字符串時,將該字符串作為函數(shù)體轉(zhuǎn)換為JS函數(shù),根據(jù)所述屬性的名稱和所述JS函數(shù)生成全局對象;
[0040]第六生成子模塊,用于當(dāng)所述預(yù)設(shè)格式對象的屬性的屬性值為帶所述引用表索引信息前綴的字符串時,將該字符串作為唯一標(biāo)識,判斷該字符串是否存在于所述映射表中;當(dāng)存在時,根據(jù)所述映射表獲取所述屬性的屬性值地址,根據(jù)所述引用表獲取該字符串對應(yīng)的預(yù)設(shè)格式對象的屬性,根據(jù)所述屬性的屬性值地址和所述屬性的名稱生成全局對象;當(dāng)不存在時,創(chuàng)建一全局對象的屬性,在所述引用表中查找該字符串對應(yīng)的預(yù)設(shè)格式對象的屬性,根據(jù)該字符串對應(yīng)的預(yù)設(shè)格式對象的屬性和所述創(chuàng)建的全局對象的屬性,將該字符串和該字符串對應(yīng)的屬性值地址加入映射表中,并根據(jù)該屬性的名稱和屬性值地址生成全局對象。
[0041]根據(jù)本公開實施例的第三方面,提供一種網(wǎng)頁保存的裝置,包括:
[0042]處理器;
[0043]用于存儲處理器可執(zhí)行指令的存儲器;
[0044]其中,所述處理器被配置為:
[0045]獲取網(wǎng)頁的節(jié)點樹對應(yīng)的JS環(huán)境,并獲取所述JS環(huán)境關(guān)聯(lián)的全局對象;
[0046]根據(jù)所述全局對象、序列化規(guī)則、預(yù)設(shè)的引用表和預(yù)設(shè)的映射表,生成預(yù)設(shè)格式對象,其中,所述引