[转]phonegap, 以及浏览器端db容量限制问题
?
--关于phonegap:
android和ios提供了webview视图,它可以用来展示网页,支持HTML5。
phonegap正是使用webview来完成对html和css的包装的。
phonegap允许网页使用系统级别的功能,如加速器,文件系统等,但这些功能的使用会拖慢运行效率。
phonegap目前并不能真正做到“一次书写,到处运行”,有些API只支持部分平台,有些已经提供的API会因为平台的差异有不同的行为。
phonegap 可以做到无缝升级, 不过需要自己实现升级代码
--关于网页对于数据库容量的限制:
native app中展示网页,使用的数据库是属于这个app而不是浏览器的
Android:
phonegap在android平台上,有如下表现:
1. native app中展示网页,可以通过window.opendatabase()申请容量超过5MB的数据库
2. 如果因为数据变更导致超出了申请的容量,当前的事务操作会失败,然后android调用钩子方法重新设置容量大小。其中:
?? ? a. 1.x系统容量不变
?? ? b. 2.x系统以上容量增加,上限为100MB
ios:
phonegap在ios平台上不提供对db的额外处理。
native app中展示网页,网页所使用的db,limit为5MB,超出这个限制,操作会默默的失败,并且目前没有可以改变这个限制的方法。
ios中要想使用50MB的数据库,必须通过web app方式,除非自行开发功能,将db操作映射到系统的db上。但是由于ios系统的限制,自行开发工作量大。
ios中webview突破db size的5M限制
当在safari中申请超过5m大小的空间时,会弹出提醒让用户确认,但webview中却只是默默的失败。其实5M大小基本也够用了,但如果应用的多媒体内容很多,这点容量则会显得捉襟见肘。如果非要用webview不可,非要突破这个5M限制不可,就可以像下面这样折腾。
虽然两者使用的是同一个浏览器核心,但是webview在有些细节上和safari会不相同,如果要把webapp直接包装移植成native app,会有点麻烦。
由于目前没有方法通过操作webview对象来放宽db size的限制,所以需要考虑调用ios系统的sqlite数据库:当网页依照websql的api调用db.transaction的时候,调用请求由app而不是浏览器(webview)去处理。
因此在ios上,需要覆盖opendatabase的实现,返回定制过的db对象,这个对象将把所有的sql调用发送到ios后端,并响应执行结果。执行序列要保证一致,事务完整性必须被支持。
js前端
覆盖database
Database = function() {
??????? this.queryQueue = {};
??? }
window.openDatabase = function(){return new Database();}
将sql调用发送到后端,利用phonegap提供的框架支持:
PhoneGap.exec(null, null, "Database", "executeSql", [sql, params, trackId]);
提供一个用于ios后端传递运行结果的钩子:
function executeSqlSuccessIOSCallback(dataObj){...}
这个调用会构造出一个不可见的iframe,iframe对外发出的url请求会被ios后端捕获。
ios后端
相应js调用,利用phonegap提供的框架支持,扩展phonegapCommand
@interface?Database :?PhoneGapCommand?{}
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。