本發(fā)明涉及計(jì)算機(jī)技術(shù),特別涉及一種數(shù)據(jù)存儲(chǔ)方法和裝置。
背景技術(shù):
在瀏覽器中加載運(yùn)行某些頁面時(shí),可以將該頁面顯示所需的資源存儲(chǔ)在瀏覽器的本地存儲(chǔ)空間,這樣待下次運(yùn)行時(shí)可以由本地獲取該資源。例如,在開發(fā)支持離線的Web應(yīng)用程序時(shí),該應(yīng)用程序離線工作時(shí)所需的資源文件,瀏覽器可以在在線狀態(tài)時(shí)將這些文件下載存儲(chǔ)在本地存儲(chǔ)空間,當(dāng)用戶離線訪問該應(yīng)用程序時(shí),可以由本地獲取資源文件并自動(dòng)加載,從而使得用戶可以在離線時(shí)正常使用該應(yīng)用程序。但是,當(dāng)前主流瀏覽器的本地存儲(chǔ)空間都有限制,通??梢酝ㄟ^域名限制本地存儲(chǔ)空間,例如,一個(gè)域名對(duì)應(yīng)的本地存儲(chǔ)空間可以是5MB,這無法滿足大型離線Web應(yīng)用程序的大量數(shù)據(jù)本地存儲(chǔ)需求。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種數(shù)據(jù)存儲(chǔ)方法和裝置,以使得瀏覽器本地存儲(chǔ)能夠滿足各種容量的數(shù)據(jù)存儲(chǔ)需求。
具體地,本發(fā)明是通過如下技術(shù)方案實(shí)現(xiàn)的:
第一方面,提供一種數(shù)據(jù)存儲(chǔ)方法,所述方法包括:
調(diào)用瀏覽器的本地存儲(chǔ)接口,向當(dāng)前頁面對(duì)應(yīng)的域名下的存儲(chǔ)空間存儲(chǔ)應(yīng)用數(shù)據(jù);
當(dāng)所述域名下的存儲(chǔ)空間不足以存儲(chǔ)所述應(yīng)用數(shù)據(jù)時(shí),創(chuàng)建至少一個(gè)超文本標(biāo)記語言框架iframe,每個(gè)iframe加載一個(gè)頁面,所述頁面對(duì)應(yīng)一個(gè)泛域名下的子域名;
將剩余的應(yīng)用數(shù)據(jù)存儲(chǔ)在至少一個(gè)所述子域名對(duì)應(yīng)的存儲(chǔ)空間。
第二方面,提供一種數(shù)據(jù)存儲(chǔ)裝置,所述裝置包括:數(shù)據(jù)存儲(chǔ)模塊和頁面創(chuàng)建模塊;
所述數(shù)據(jù)存儲(chǔ)模塊,用于調(diào)用瀏覽器的本地存儲(chǔ)接口,向當(dāng)前頁面對(duì)應(yīng)的域名下的存儲(chǔ)空間存儲(chǔ)應(yīng)用數(shù)據(jù);還用于當(dāng)所述域名下的存儲(chǔ)空間不足以存儲(chǔ)所述應(yīng)用數(shù)據(jù)時(shí),將剩余的應(yīng)用數(shù)據(jù)存儲(chǔ)在頁面創(chuàng)建模塊創(chuàng)建的至少一個(gè)所述子域名對(duì)應(yīng)的存儲(chǔ)空間;
所述頁面創(chuàng)建模塊,用于當(dāng)所述域名下的存儲(chǔ)空間不足以存儲(chǔ)所述應(yīng)用數(shù)據(jù)時(shí),創(chuàng)建至少一個(gè)超文本標(biāo)記語言框架iframe,每個(gè)iframe加載一個(gè)頁面,所述頁面對(duì)應(yīng)一個(gè)泛域名下的子域名。
本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)方法和裝置,通過創(chuàng)建泛域名下的子域名對(duì)應(yīng)的代理頁面,使得可以將父頁面不足夠存儲(chǔ)的數(shù)據(jù)放入該子域名對(duì)應(yīng)的存儲(chǔ)空間存儲(chǔ),并且由于泛域名可以支持無限的子域名,可以根據(jù)存儲(chǔ)需求適應(yīng)性創(chuàng)建子域名的頁面,能夠使得瀏覽器本地存儲(chǔ)滿足各種容量的數(shù)據(jù)存儲(chǔ)需求。
附圖說明
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
圖3為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)裝置的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)存儲(chǔ)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
當(dāng)前瀏覽器的本地存儲(chǔ)空間都是有限制的,通常可以根據(jù)域名進(jìn)行限制,每個(gè)域名有特定的最大存儲(chǔ)容量,但是這種容量的限制有時(shí)無法滿足數(shù)據(jù)存儲(chǔ)的需求,尤其是將成為大型離線應(yīng)用本地存儲(chǔ)數(shù)據(jù)的瓶頸。本申請(qǐng)實(shí)施例提供的數(shù)據(jù)存儲(chǔ)方法,將突破這種瀏覽器本地存儲(chǔ)空間的容量限制,使得瀏覽器本地可以存儲(chǔ)任意容量規(guī)模的數(shù)據(jù),適應(yīng)各種容量的數(shù)據(jù)存儲(chǔ)需求。
為了實(shí)現(xiàn)上述目的,在一個(gè)例子中,可以將應(yīng)用的域名設(shè)置為支持泛域名。例如,某個(gè)大型離線應(yīng)用,該應(yīng)用的域名為“*.abc.com”,該域名可以支持泛域名解析,比如,“123.abc.com”或者“234.abc.com”等都可以與“*.abc.com”指向同一IP地址。上述方式可以使得該域名支持無限的子域名,例如,“123.abc.com”、“234.abc.com”等都是泛域名下的子域名。
在設(shè)置域名支持泛域名的基礎(chǔ)上,圖1示例了本例子的數(shù)據(jù)存儲(chǔ)方法的一個(gè)示例性流程,該方法可以由要在瀏覽器本地存儲(chǔ)數(shù)據(jù)的應(yīng)用執(zhí)行,例如可以由所開發(fā)的某大型離線應(yīng)用執(zhí)行。如圖1所示,該方法可以包括:
在步驟101中,調(diào)用瀏覽器的本地存儲(chǔ)接口,向當(dāng)前頁面對(duì)應(yīng)的域名下的存儲(chǔ)空間存儲(chǔ)應(yīng)用數(shù)據(jù),所述域名支持泛域名。
例如,瀏覽器的本地存儲(chǔ)接口可以包括:local Storage、Web SQL、Index DB等API,當(dāng)瀏覽器加載運(yùn)行離線應(yīng)用時(shí),該應(yīng)用程序可以調(diào)用瀏覽器提供的本地存儲(chǔ)接口,將應(yīng)用數(shù)據(jù)存儲(chǔ)在瀏覽器的本地存儲(chǔ)空間。
而根據(jù)瀏覽器的特性,瀏覽器將根據(jù)域名限制應(yīng)用數(shù)據(jù)的存儲(chǔ)。例如,假設(shè)一個(gè)域名對(duì)應(yīng)5MB的存儲(chǔ)空間,那么應(yīng)用數(shù)據(jù)將先向該存儲(chǔ)空間進(jìn)行存儲(chǔ)。其中,本步驟中的應(yīng)用數(shù)據(jù),可以是用戶在訪問應(yīng)用的域名時(shí),由應(yīng)用服務(wù)器將應(yīng)用加載所需的數(shù)據(jù)傳輸至該域名對(duì)應(yīng)的當(dāng)前頁面。
在步驟102中,當(dāng)域名下的存儲(chǔ)空間不足以存儲(chǔ)應(yīng)用數(shù)據(jù)時(shí),創(chuàng)建至少一個(gè)iframe,每個(gè)iframe加載域名下的一個(gè)子域名對(duì)應(yīng)的頁面。
例如,當(dāng)前頁面對(duì)應(yīng)的域名下的存儲(chǔ)空間,由于有域名對(duì)應(yīng)的存儲(chǔ)容量的限制,而不足以存儲(chǔ)應(yīng)用數(shù)據(jù),比如,假設(shè)應(yīng)用數(shù)據(jù)共有10MB,而該域名下的存儲(chǔ)空間容量上限是5MB,則該空間無法容納所有的應(yīng)用數(shù)據(jù)。
本例子中,應(yīng)用可以在當(dāng)前頁面創(chuàng)建至少一個(gè)iframe,每一個(gè)irame中加載一個(gè)頁面,該頁面可以稱為代理頁面,并且,該代理頁面對(duì)應(yīng)步驟101中的泛域名域名下的一個(gè)子域名。例如,當(dāng)前頁面的域名是“*.abc.com”,本步驟創(chuàng)建的該泛域名下的一個(gè)子域名可以是“123.abc.com”,當(dāng)然也可以創(chuàng)建該域名下的其他的子域名比如,“234.abc.com”,該域名可以支持泛域名,因此可以支持無限的子域名。
當(dāng)創(chuàng)建子域名對(duì)應(yīng)的代理頁面后,根據(jù)瀏覽器的“通過域名限制本地存儲(chǔ)空間”的特性,該子域名將產(chǎn)生一個(gè)新的對(duì)應(yīng)的本地存儲(chǔ)空間,比如,還可以是5MB,那就相當(dāng)于又增加了一個(gè)5MB的本地存儲(chǔ)空間;剩余的應(yīng)用數(shù)據(jù)可以繼續(xù)在該子域名下的本地存儲(chǔ)空間進(jìn)行存儲(chǔ)。
本步驟中,具體創(chuàng)建的iframe的數(shù)量,可以根據(jù)數(shù)據(jù)存儲(chǔ)需求來確定,比如,假設(shè)步驟101中在向當(dāng)前頁面對(duì)應(yīng)的存儲(chǔ)空間存儲(chǔ)數(shù)據(jù)后,剩余了6MB的應(yīng)用數(shù)據(jù),那么可以創(chuàng)建兩個(gè)iframe,每個(gè)iframe加載一個(gè)子域名對(duì)應(yīng)的代理頁面,且假設(shè)每個(gè)子域名產(chǎn)生5MB的本地存儲(chǔ)空間,則這兩個(gè)iframe的創(chuàng)建將可以使得應(yīng)用數(shù)據(jù)存儲(chǔ)完畢。又例如,假設(shè)步驟101中剩余了12MB的應(yīng)用數(shù)據(jù),則根據(jù)上述的示例,可以創(chuàng)建三個(gè)iframe,每個(gè)iframe加載一個(gè)子域名對(duì)應(yīng)的代理頁面,以將應(yīng)用數(shù)據(jù)完成存儲(chǔ)。
在步驟103中,將剩余的應(yīng)用數(shù)據(jù)存儲(chǔ)在至少一個(gè)子域名對(duì)應(yīng)的存儲(chǔ)空間。
本步驟中,即將步驟101中剩余的未存儲(chǔ)的應(yīng)用數(shù)據(jù),存儲(chǔ)在步驟102中創(chuàng)建的子域名對(duì)應(yīng)的本地存儲(chǔ)空間中。需要說明的是,圖1的流程中,并不限制個(gè)步驟之間的執(zhí)行順序,例如,當(dāng)應(yīng)用需要?jiǎng)?chuàng)建至少兩個(gè)iframe時(shí),可以是通過執(zhí)行一次步驟102和步驟103,完成一個(gè)iframe的創(chuàng)建并將數(shù)據(jù)存儲(chǔ)至該iframe對(duì)應(yīng)的子域名的存儲(chǔ)空間,然后再執(zhí)行一次步驟102和步驟103,完成另一個(gè)iframe的創(chuàng)建以及數(shù)據(jù)存儲(chǔ)。
本例子的數(shù)據(jù)存儲(chǔ)方法,以在當(dāng)前頁面創(chuàng)建多個(gè)iframe,并在該iframe中引入對(duì)應(yīng)一個(gè)子域名的頁面的方式,使得該子域名產(chǎn)生一個(gè)新的對(duì)應(yīng)存儲(chǔ)空間;并且,本例子的方法中,iframe中的頁面對(duì)應(yīng)的子域名,是“泛域名下的子域名”,采用泛域名下的子域名,可以帶來多種突出的效果,例如,如下三種效果:
第一、使得瀏覽器的本地存儲(chǔ)空間無窮大;
由于泛域名可以支持無限的子域名,那么可以無限擴(kuò)展瀏覽器的本地存儲(chǔ)空間,例如,泛域名“*.abc.com”下可以有“123.abc.com”、“234.abc.com”、“456.abc.com”等無限個(gè)子域名,可以根據(jù)數(shù)據(jù)存儲(chǔ)需求無限制的創(chuàng)建iframe中的頁面,直至能夠足夠存儲(chǔ)應(yīng)用數(shù)據(jù)。這種方式相當(dāng)于使得瀏覽器的本地存儲(chǔ)空間無窮大,突破了瀏覽器本地存儲(chǔ)空間的限制。
第二、使得瀏覽器本地存儲(chǔ)空間更加靈活的增加;
正是由于泛域名支持無限個(gè)子域名,可以為iframe中嵌入的頁面分配該泛域名下的任意一個(gè)子域名即可,這種子域名相當(dāng)于是隨用隨取的,非常方便。而假設(shè)不采用泛域名下的子域名,預(yù)先申請(qǐng)幾個(gè)子域名以供iframe中的頁面所用,操作就會(huì)相對(duì)繁瑣,因?yàn)槊總€(gè)子域名都需要預(yù)先申請(qǐng)使用。
并且,這種預(yù)先申請(qǐng)幾個(gè)子域名用來使用的方式,其實(shí)相當(dāng)于對(duì)瀏覽器的本地存儲(chǔ)空間進(jìn)行了定制,存儲(chǔ)空間的容量還是有限的。比如,假設(shè)每個(gè)子域名對(duì)應(yīng)5MB的存儲(chǔ)空間,那如果預(yù)先申請(qǐng)三個(gè)子域名,將使得瀏覽器增加本地存儲(chǔ)空間15MB,多于該容量的數(shù)據(jù)仍然不能滿足存儲(chǔ)需求;如果預(yù)先申請(qǐng)五個(gè)子域名,將使得瀏覽器增加本地存儲(chǔ)空間25MB,多于該容量的數(shù)據(jù)不能存儲(chǔ)。因此,不采用泛域名下的子域名,瀏覽器的本地存儲(chǔ)空間不能稱之為無窮大,其仍然是一個(gè)有一定容量限制的存儲(chǔ)空間,如果要增加存儲(chǔ)空間,則需要繼續(xù)申請(qǐng)新的子域名,使得瀏覽器本地存儲(chǔ)空間的增加就相對(duì)不夠靈活。
第三、使得瀏覽器本地存儲(chǔ)空間能夠滿足動(dòng)態(tài)的數(shù)據(jù)存儲(chǔ)容量的變化;
應(yīng)用數(shù)據(jù)的規(guī)模也可能是動(dòng)態(tài)變化的,例如,當(dāng)前需要存儲(chǔ)5MB的數(shù)據(jù),也可能應(yīng)用在使用的過程中產(chǎn)生了大量的數(shù)據(jù),數(shù)據(jù)存儲(chǔ)需求增加到20MB。采用本例子中的泛域名下的子域名的方式,完全可以滿足這種動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)需求,不論數(shù)據(jù)增加多少,都可以根據(jù)數(shù)據(jù)規(guī)模靈活快速的增加iframe即可。
同樣,仍對(duì)比上面第二點(diǎn)提到的預(yù)先申請(qǐng)幾個(gè)子域名以供iframe中的頁面所用的方式,這種方式就相對(duì)靜態(tài)化,當(dāng)數(shù)據(jù)存儲(chǔ)需求變化,原來預(yù)申請(qǐng)的幾個(gè)子域名已經(jīng)不足夠存儲(chǔ)應(yīng)用數(shù)據(jù)時(shí),則需要再申請(qǐng)幾個(gè)新的子域名來滿足增加的數(shù)據(jù)存儲(chǔ)需求,非常不靈活。
本申請(qǐng)實(shí)施例的方法是一種動(dòng)態(tài)創(chuàng)建iframe的方式,可以根據(jù)數(shù)據(jù)存儲(chǔ)需求實(shí)時(shí)動(dòng)態(tài)的引入新的子域名,即數(shù)據(jù)存儲(chǔ)需要幾個(gè)iframe,則創(chuàng)建幾個(gè)引入子域名的iframe,可以很好的適應(yīng)和滿足數(shù)據(jù)存儲(chǔ)需求;并且,該方法通過將域名設(shè)置為支持泛域名,使得該域名下可以有無限的子域名,隨時(shí)可以根據(jù)數(shù)據(jù)存儲(chǔ)需求建立一個(gè)該泛域名下的子域名,使用起來非常方便。
圖2以一個(gè)例子,描述本申請(qǐng)實(shí)施例的數(shù)據(jù)存儲(chǔ)方法的一個(gè)應(yīng)用。在本例子中,假定一個(gè)域名(或子域名)對(duì)應(yīng)的本地存儲(chǔ)空間容量是5MB,并且假設(shè)當(dāng)前的應(yīng)用要在瀏覽器本地存儲(chǔ)的應(yīng)用數(shù)據(jù)為12MB,存儲(chǔ)流程可以如下:
在步驟201中,調(diào)用瀏覽器的本地存儲(chǔ)接口,向當(dāng)前頁面對(duì)應(yīng)的域名下的存儲(chǔ)空間存儲(chǔ)應(yīng)用數(shù)據(jù)。
例如,當(dāng)前頁面可以稱為父頁面,可以通過瀏覽器提供的local Storage、Index DB等API,向該父頁面的域名對(duì)應(yīng)的本地存儲(chǔ)空間中存儲(chǔ)應(yīng)用數(shù)據(jù)。
在步驟202中,判斷當(dāng)前頁面對(duì)應(yīng)的所述域名下的存儲(chǔ)空間,是否足夠存儲(chǔ)所述應(yīng)用數(shù)據(jù)。
若判斷結(jié)果為足夠,則將應(yīng)用數(shù)據(jù)存儲(chǔ)在該當(dāng)前頁面的域名對(duì)應(yīng)的存儲(chǔ)空間即可,可以結(jié)束流程。
而本例子中,假定的需要存儲(chǔ)的應(yīng)用數(shù)據(jù)為12MB,當(dāng)前頁面的域名下的存儲(chǔ)空間為5MB,則本步驟的判斷結(jié)果為不足夠,則可以繼續(xù)執(zhí)行步驟203。
在步驟203中,創(chuàng)建一個(gè)iframe,在所述iframe加載一個(gè)代理頁面,所述代理頁面對(duì)應(yīng)所述域名下的一個(gè)子域名。
例如,可以在當(dāng)前的父頁面創(chuàng)建一個(gè)iframe,在所述iframe加載一個(gè)代理頁面,該代理頁面可以稱為子頁面。并且,本例子中,為了不影響父頁面的體驗(yàn),可以將創(chuàng)建的iframe中嵌入的子頁面設(shè)置為不顯示,例如,可以通過設(shè)置子頁面的屬性使得隱藏該頁面。該子頁面的創(chuàng)建,是為了使用該子頁面的對(duì)應(yīng)的子域名下的存儲(chǔ)空間,該子域名是父頁面的域名下的一個(gè)子域名。
本步驟中,若創(chuàng)建iframe中的代理頁面失敗,則繼續(xù)重新執(zhí)行步驟203,再次創(chuàng)建一個(gè)iframe,引入一個(gè)子域名對(duì)應(yīng)的代理頁面。
若創(chuàng)建iframe中的代理頁面成功,則繼續(xù)執(zhí)行步驟204。
在步驟204中,調(diào)用瀏覽器的本地存儲(chǔ)接口,在所述子域名對(duì)應(yīng)的存儲(chǔ)空間中繼續(xù)存儲(chǔ)應(yīng)用數(shù)據(jù)。
例如,可以將在步驟201中向父頁面的存儲(chǔ)空間存儲(chǔ)數(shù)據(jù)時(shí),剩余未存儲(chǔ)的應(yīng)用數(shù)據(jù)繼續(xù)存儲(chǔ)在該子頁面的存儲(chǔ)空間。父頁面和子頁面之間的數(shù)據(jù)交互,可以是父頁面將應(yīng)用數(shù)據(jù)傳輸給子頁面,以在子頁面的存儲(chǔ)空間進(jìn)行存儲(chǔ);將應(yīng)用數(shù)據(jù)由當(dāng)前父頁面?zhèn)鬏斨了鲎佑蛎麑?duì)應(yīng)的子頁面。設(shè)置跨域數(shù)據(jù)傳輸?shù)姆椒ê芏?,例如其中一種方法可以是,采用postMessage API。
如下示例部分創(chuàng)建一個(gè)iframe以引入代理頁面的實(shí)例:
創(chuàng)建一個(gè)iframe
var iframeNode=document.createElement("iframe")
所創(chuàng)建的該iframe中的子頁面的地址
iframe.src="http://x.alipay.net/proxy.htm
父頁面調(diào)用子頁面,以將應(yīng)用數(shù)據(jù)傳輸至子頁面存儲(chǔ)
document.appendChild(iframeNode)
本步驟中,在將應(yīng)用數(shù)據(jù)向子域名下的存儲(chǔ)空間存儲(chǔ)時(shí),仍然可以繼續(xù)判斷該子域名對(duì)應(yīng)的存儲(chǔ)空間是否足夠存儲(chǔ)應(yīng)用數(shù)據(jù),即可以返回執(zhí)行步驟202。如果創(chuàng)建該一個(gè)iframe中的子頁面足夠,則可以結(jié)束流程;如果仍不足夠存儲(chǔ)應(yīng)用數(shù)據(jù),則繼續(xù)執(zhí)行步驟203,創(chuàng)建一個(gè)新的iframe,引入另一個(gè)新的子域名對(duì)應(yīng)的代理頁面,直至足夠存儲(chǔ)應(yīng)用數(shù)據(jù)則不再創(chuàng)建。本例子中,為了存儲(chǔ)12MB應(yīng)用數(shù)據(jù),需要?jiǎng)?chuàng)建兩個(gè)iframe,每個(gè)iframe加載一個(gè)子域名下的代理頁面。
在另一個(gè)例子中,不同于上述的每創(chuàng)建一個(gè)iframe就判斷一次是否已經(jīng)足夠存儲(chǔ)應(yīng)用數(shù)據(jù),本例子中可以預(yù)先根據(jù)應(yīng)用數(shù)據(jù)的規(guī)模,計(jì)算應(yīng)創(chuàng)建的iframe的數(shù)量;創(chuàng)建所述數(shù)量對(duì)應(yīng)的iframe,且在每個(gè)iframe加載一個(gè)頁面,每個(gè)所述頁面對(duì)應(yīng)泛域名下的一個(gè)子域名。比如,假設(shè)應(yīng)用數(shù)據(jù)的規(guī)模是12MB,且每個(gè)子域名對(duì)應(yīng)的存儲(chǔ)空間是5MB,那么除去當(dāng)前頁面的5MB存儲(chǔ)空間,還需要?jiǎng)?chuàng)建iframe以用于存儲(chǔ)7MB的數(shù)據(jù),該7MB的數(shù)據(jù)需要?jiǎng)?chuàng)建兩個(gè)iframe,每個(gè)iframe加載對(duì)應(yīng)泛域名下子域名的頁面,兩個(gè)子域名共可以產(chǎn)生10MB的存儲(chǔ)空間,足夠存儲(chǔ)上述的7MB的剩余應(yīng)用數(shù)據(jù)。
由以上說明可以看到,在瀏覽器本地存儲(chǔ)應(yīng)用數(shù)據(jù)時(shí),可以根據(jù)數(shù)據(jù)存儲(chǔ)需求,動(dòng)態(tài)創(chuàng)建iframe,比如,如果需要再創(chuàng)建兩個(gè)iframe可以足夠存儲(chǔ)數(shù)據(jù),則創(chuàng)建兩個(gè),如果需要?jiǎng)?chuàng)建六個(gè)iframe才能足夠存儲(chǔ)數(shù)據(jù),則創(chuàng)建六個(gè),這種方式使得數(shù)據(jù)的存儲(chǔ)不會(huì)受到瀏覽器的域名存儲(chǔ)容量的限制,可以滿足任何規(guī)模的數(shù)據(jù)存儲(chǔ)需求;并且,通過泛域名的設(shè)置,可以支持無限的子域名,需要時(shí)創(chuàng)建即可,不需要額外再申請(qǐng)域名,使用非常方便。
此外,完成應(yīng)用數(shù)據(jù)的存儲(chǔ)后,當(dāng)下次使用該數(shù)據(jù)時(shí),例如,離線應(yīng)用在離線時(shí)加載運(yùn)行時(shí),需要將這些存儲(chǔ)的應(yīng)用數(shù)據(jù)重新在瀏覽器加載,此時(shí),可以分別由所述域名下的存儲(chǔ)空間、以及至少一個(gè)所述子域名對(duì)應(yīng)的存儲(chǔ)空間中,獲取所述應(yīng)用數(shù)據(jù)。其中,子頁面可以通過postMesage函數(shù)調(diào)用父頁面的函數(shù),將子頁面存儲(chǔ)的應(yīng)用數(shù)據(jù)(即子頁面對(duì)應(yīng)的子域名下的存儲(chǔ)空間中存儲(chǔ)的數(shù)據(jù))傳輸至父頁面,在父頁面統(tǒng)一顯示應(yīng)用數(shù)據(jù)。
此外,在上面的例子中,是以當(dāng)前頁面的域名為泛域名為例,在iframe中加載的頁面對(duì)應(yīng)的是該泛域名下的一個(gè)子域名。這只是一個(gè)例子,具體實(shí)施中并不局限于此,比如,創(chuàng)建的iframe中的頁面,對(duì)應(yīng)的仍然是某一個(gè)泛域名下的一個(gè)子域名,但是該泛域名并不是當(dāng)前頁面對(duì)應(yīng)的域名,即當(dāng)前頁面的域名與上述的泛域名是不同的域名。
舉例如下:假設(shè)當(dāng)前頁面域名是www.123.com,當(dāng)該頁面的域名下的存儲(chǔ)空間不夠存儲(chǔ)應(yīng)用數(shù)據(jù)時(shí),創(chuàng)建一個(gè)iframe,該iframe中加載的頁面對(duì)應(yīng)某個(gè)泛域名下的一個(gè)子域名,該泛域名可以是*.abc.com,該泛域名下的一個(gè)子域名可以是456.abc.com。這種情況下,盡管當(dāng)前頁面域名與iframe中頁面對(duì)應(yīng)的泛域名不同,但是由于創(chuàng)建的仍然是泛域名下的子域名對(duì)應(yīng)的頁面,可以無限擴(kuò)充,能夠?qū)崿F(xiàn)與前述例子相同的效果,即可以滿足任何容量的數(shù)據(jù)存儲(chǔ)需求。
為了實(shí)現(xiàn)上述的數(shù)據(jù)存儲(chǔ)方法,本申請(qǐng)實(shí)施例還提供了一種數(shù)據(jù)存儲(chǔ)裝置,如下對(duì)該裝置的結(jié)構(gòu)做簡(jiǎn)單說明,其具體的工作原理可以結(jié)合參見方法實(shí)施例。如圖3所示,該裝置可以包括:數(shù)據(jù)存儲(chǔ)模塊31和頁面創(chuàng)建模塊32。
數(shù)據(jù)存儲(chǔ)模塊31,用于調(diào)用瀏覽器的本地存儲(chǔ)接口,向當(dāng)前頁面對(duì)應(yīng)的域名下的存儲(chǔ)空間存儲(chǔ)應(yīng)用數(shù)據(jù);還用于當(dāng)所述域名下的存儲(chǔ)空間不足以存儲(chǔ)所述應(yīng)用數(shù)據(jù)時(shí),將剩余的應(yīng)用數(shù)據(jù)存儲(chǔ)在頁面創(chuàng)建模塊創(chuàng)建的至少一個(gè)所述子域名對(duì)應(yīng)的存儲(chǔ)空間;
所述頁面創(chuàng)建模塊32,用于當(dāng)所述域名下的存儲(chǔ)空間不足以存儲(chǔ)所述應(yīng)用數(shù)據(jù)時(shí),創(chuàng)建至少一個(gè)超文本標(biāo)記語言框架iframe,每個(gè)iframe加載一個(gè)頁面,所述頁面對(duì)應(yīng)一個(gè)泛域名下的子域名。
在一個(gè)例子中,頁面創(chuàng)建模塊32,用于判斷當(dāng)前頁面對(duì)應(yīng)的所述域名下的存儲(chǔ)空間,是否足夠存儲(chǔ)所述應(yīng)用數(shù)據(jù);若判斷結(jié)果為不足夠,則創(chuàng)建一個(gè)iframe,在所述iframe加載一個(gè)代理頁面,所述代理頁面對(duì)應(yīng)所述域名下的一個(gè)子域名;當(dāng)所述子域名對(duì)應(yīng)的存儲(chǔ)空間仍不足夠存儲(chǔ)所述應(yīng)用數(shù)據(jù)時(shí),繼續(xù)創(chuàng)建一個(gè)iframe,在所述iframe加載一個(gè)對(duì)應(yīng)所述域名下的另一個(gè)子域名的代理頁面。
在一個(gè)例子中,頁面創(chuàng)建模塊32,用于根據(jù)所述應(yīng)用數(shù)據(jù)的規(guī)模,計(jì)算應(yīng)創(chuàng)建的iframe的數(shù)量;創(chuàng)建所述數(shù)量對(duì)應(yīng)的iframe,且在每個(gè)iframe加載一個(gè)頁面,每個(gè)所述頁面對(duì)應(yīng)泛域名下的一個(gè)子域名。
在一個(gè)例子中,數(shù)據(jù)存儲(chǔ)模塊31,在用于將剩余的應(yīng)用數(shù)據(jù)存儲(chǔ)在至少一個(gè)所述子域名對(duì)應(yīng)的存儲(chǔ)空間時(shí),包括:將所述子域名對(duì)應(yīng)的頁面與所述域名對(duì)應(yīng)的當(dāng)前頁面,設(shè)置為同域;將所述應(yīng)用數(shù)據(jù)由當(dāng)前頁面?zhèn)鬏斨了鲎佑蛎麑?duì)應(yīng)的頁面。
在一個(gè)例子中,如圖4所示,該裝置還可以包括:數(shù)據(jù)獲取模塊33,用于當(dāng)在瀏覽器中加載存儲(chǔ)的所述應(yīng)用數(shù)據(jù)時(shí),分別由所述域名下的存儲(chǔ)空間、以及至少一個(gè)所述子域名對(duì)應(yīng)的存儲(chǔ)空間中,獲取所述應(yīng)用數(shù)據(jù)。
在一個(gè)例子中,所述泛域名是所述當(dāng)前頁面對(duì)應(yīng)的域名;或者,所述泛域名是與當(dāng)前頁面的域名不同的另一個(gè)域名。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。