自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Phonegap及瀏覽器端database容量限制問題

移動開發(fā)
phonegap及瀏覽器端database容量限制問題是本文要介紹的內容,主要是來了解phonegap database的使用方法,具體內容的實現(xiàn)來看本文詳解。

phonegap瀏覽器database容量限制問題是本文要介紹的內容,主要是來了解phonegap database的使用方法,具體內容的實現(xiàn)來看本文詳解。

關于phonegap:

androidIOS提供了webview視圖,它可以用來展示網(wǎng)頁,支持HTML5。

phonegap正是使用webview來完成對html和css的包裝的。

phonegap允許網(wǎng)頁使用系統(tǒng)級別的功能,如加速器,文件系統(tǒng)等,但這些功能的使用會拖慢運行效率。

phonegap目前并不能真正做到“一次書寫,到處運行”,有些API只支持部分平臺,有些已經(jīng)提供的API會因為平臺的差異有不同的行為。

phonegap 可以做到無縫升級, 不過需要自己實現(xiàn)升級代碼

關于網(wǎng)頁對于數(shù)據(jù)庫容量的限制:

native app中展示網(wǎng)頁,使用的數(shù)據(jù)庫是屬于這個app而不是瀏覽器的

Android:

phonegap在android平臺上,有如下表現(xiàn):

1. native app中展示網(wǎng)頁,可以通過window.opendatabase()申請容量超過5MB的數(shù)據(jù)庫

2. 如果因為數(shù)據(jù)變更導致超出了申請的容量,當前的事務操作會失敗,然后android調用鉤子方法重新設置容量大小。其中:

(1)1.x系統(tǒng)容量不變

(2)2.x系統(tǒng)以上容量增加,上限為100MB

IOS:

phonegap在ios平臺上不提供對database的額外處理。

native app中展示網(wǎng)頁,網(wǎng)頁所使用的database,limit為5MB,超出這個限制,操作會默默的失敗,并且目前沒有可以改變這個限制的方法。
ios中要想使用50MB的數(shù)據(jù)庫,必須通過web app方式,除非自行開發(fā)功能,將database操作映射到系統(tǒng)的database上。但是由于ios系統(tǒng)的限制,自行開發(fā)工作量大。

IOS中webview突破database size的5M限制

當在safari中申請超過5m大小的空間時,會彈出提醒讓用戶確認,但webview中卻只是默默的失敗。其實5M大小基本也夠用了,但如果應用的多媒體內容很多,這點容量則會顯得捉襟見肘。如果非要用webview不可,非要突破這個5M限制不可,就可以像下面這樣折騰。

雖然兩者使用的是同一個瀏覽器核心,但是webview在有些細節(jié)上和safari會不相同,如果要把webapp直接包裝移植成native app,會有點麻煩。

由于目前沒有方法通過操作webview對象來放寬database size的限制,所以需要考慮調用ios系統(tǒng)的sqlite數(shù)據(jù)庫:當網(wǎng)頁依照websql的api調用database.transaction的時候,調用請求由app而不是瀏覽器(webview)去處理。

因此在ios上,需要覆蓋opendatabase的實現(xiàn),返回定制過的database對象,這個對象將把所有的sql調用發(fā)送到ios后端,并響應執(zhí)行結果。執(zhí)行序列要保證一致,事務完整性必須被支持。

js前端

覆蓋database

  1. database = function() {  
  2.    this.queryQueue = {};  
  3.     }  
  4. window.opendatabase = function(){return new database();} 

將sql調用發(fā)送到后端,利用phonegap提供的框架支持:

  1. PhoneGap.exec(null, null, "database", "executeSql", [sql, params, trackId]); 

提供一個用于ios后端傳遞運行結果的鉤子:

  1. function executeSqlSuccessIOSCallback(dataObj){...} 

這個調用會構造出一個不可見的iframe,iframe對外發(fā)出的url請求會被ios后端捕獲。

ios后端

相應js調用,利用phonegap提供的框架支持,擴展phonegapCommand

  1. @interface database : PhoneGapCommand {}  
  2. -(void) executeSql:(NSMutableArray *)arguments withDict:(NSMutableDictionary*)options;  
  3. @end 

注意這里的參數(shù)是固定的,方法名對應js調用中的第四個參數(shù),有一種調用就實現(xiàn)一個對應的方法

當executesql產(chǎn)生結果時,調用webview的執(zhí)行js的接口,把結果放入executeSqlSuccessIOSCallback的參數(shù)中,從而使頁面知道sql執(zhí)行完畢并拿到結果

保證執(zhí)行序列一致

js調用中附加了一個trackId,這個可以根據(jù)當前時間來生成,可以用來排序。不過目前來看似乎也沒用.

websql api中,sql執(zhí)行都是在某個事務中進行的,而sqlite作為單文件全局寫鎖的數(shù)據(jù)庫,同一個時間只能有一個事務在執(zhí)行,其他事務必須要等待依次執(zhí)行,因此隊列是必須的。

小結:Phonegap瀏覽器database容量限制問題的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 博客園
相關推薦

2013-11-05 10:22:20

瀏覽器加密

2023-08-28 08:00:00

人工智能AgentGPT

2017-04-06 15:40:31

客戶端數(shù)據(jù)存儲技術

2022-08-30 09:01:11

瀏覽器渲染前端

2012-03-19 17:25:22

2012-03-20 11:41:18

海豚瀏覽器

2012-03-20 11:31:58

移動瀏覽器

2012-03-20 11:07:08

2023-12-12 09:45:16

前端瀏覽器

2012-06-21 15:38:02

獵豹瀏覽器

2010-04-05 21:57:14

Netscape瀏覽器

2013-11-20 14:25:45

瀏覽器重繪

2012-03-19 17:17:00

移動瀏覽器歐朋

2012-03-20 11:22:02

QQ手機瀏覽器

2011-12-14 10:01:32

瀏覽器歷史

2016-01-05 12:54:52

瀏覽器瀏覽器端緩存

2012-03-20 11:35:32

傲游手機瀏覽器

2011-04-12 16:51:29

Javascript兼容性

2010-08-11 13:35:10

JavaScriptCSS

2010-03-03 15:57:23

點贊
收藏

51CTO技術棧公眾號