如何从磁盘加载的JS中打开Mobile Safari中的数据库

时间:2010-12-03 22:32:12

标签: javascript database html5 ios mobile-safari

我们有一个iPhone应用程序,它本质上是一个封装在应用程序中的网站。这个应用程序从本地磁盘加载HTML和JS文件,并在JS中完成交互。

然而,在iOS 4.2中,JS在打开数据库时已经开始接收“SECURITY_ERR:DOM Exception 18”,因此,我们的应用根本不起作用。完全相同的文件在以前版本的iOS中运行良好,并且从Web服务器加载时工作正常。

有没有办法配置iOS以允许在本地文件中运行的JS访问数据库?

谢谢!

凯文

2 个答案:

答案 0 :(得分:1)

我相信你超过了数据库的5mb限制大小。

至少这是我能找到复制该错误信息的唯一方法。

  

浏览器通常会阻止   使用失控的Web应用程序   设置过多的本地资源   限制每个网站的大小   数据库。当数据库改变时   导致数据库超过该数据库   限制,通知用户并询问   允许数据库的权限   进一步发展。

     

如果你知道你将成为   用很多东西填充数据库   内容,你应该指定一个充足的   这里的大小。通过这样做,用户是   只被要求许可一次   创建数据库而不是每个   随着数据库的增长,几兆字节。

     

浏览器可能会设置限制方式   你可以为此指定一个大的值   字段,但这些限制的细节   还没有完全明确。

http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/UsingtheJavascriptDatabase/UsingtheJavascriptDatabase.html%23//apple_ref/doc/uid/TP40007256-CH3-SW2

答案 1 :(得分:1)

我想我应该回答这个问题,因为我最终得到Apple Developer Support的回答,承认这是iOS4中的一个错误。

具体问题是使用[webView loadData ...]加载webView时。以这种方式加载时,webKit不允许访问数据库。如果将同一个调用更改为使用[webView loadRequest ...],则允许​​使用数据库。

这里有示例代码来演示此问题: http://code.google.com/p/iui/source/browse/sandbox/hybrid/HybridiUI/Classes/HybridiUIAppDelegate.m

顺便说一下,谷歌Chrome中存在同样的错误,它也使用了webKit。从Chrome中的本地文件加载网站时,禁止使用数据库和AJAX调用,但是从Web服务器加载时,允许这样做。