如何从磁盘加载的 JS 在 Mobile Safari 中打开数据库
Posted
技术标签:
【中文标题】如何从磁盘加载的 JS 在 Mobile Safari 中打开数据库【英文标题】:How to open Database in Mobile Safari from JS loaded from disk 【发布时间】:2010-12-03 22:32:12 【问题描述】:我们有一个 iPhone 应用程序,它本质上是一个封装在应用程序中的网站。这个应用程序从本地磁盘加载 html 和 JS 文件,并在 JS 中完成交互。
但是,在 ios 4.2 中,JS 在打开数据库时开始收到“SECURITY_ERR: DOM Exception 18”,因此我们的应用程序根本无法运行。完全相同的文件在早期版本的 iOS 中运行良好,并且在从 Web 服务器加载时运行良好。
有没有办法配置 iOS 以允许在本地文件中运行的 JS 访问数据库?
谢谢!
凯文
【问题讨论】:
澄清一下,JS 在 UIWebView 中运行,html 和 js 文件存储在本地。 【参考方案1】:我认为您超出了数据库的 5mb 大小限制。
至少这是我能找到复制该错误消息的唯一方法。
浏览器通常会阻止 使用失控的 Web 应用程序 通过设置过多的本地资源 每个站点的大小限制 数据库。当数据库更改将 导致数据库超过 限制,通知并询问用户 获得允许数据库的权限 进一步发展。
如果你知道你将成为 用大量的填充数据库 内容,你应该指定一个充足的 大小在这里。通过这样做,用户是 仅在何时请求许可一次 创建数据库而不是每个 随着数据库的增长,几兆字节。
浏览器可能会设置限制 大的值,您可以为此指定 字段,但这些限制的详细信息 尚未完全定义。
http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/UsingthejavascriptDatabase/UsingtheJavascriptDatabase.html%23//apple_ref/doc/uid/TP40007256-CH3-SW2
【讨论】:
我遇到了同样的问题。 20Mb 大小在 Chrome 和 iOS 4.3 上运行良好,但在 4.2 上我一直收到此错误,直到我将其降低到 5Mb。【参考方案2】:我想我应该回答这个问题,因为我终于得到了 Apple 开发者支持的回答,承认这是 iOS4 中的一个错误。
具体问题是当您使用 [webView loadData...] 加载 webView 时。当以这种方式加载时,webKit 不允许访问数据库。如果将相同的调用更改为使用 [webView loadRequest...] 数据库是允许的。
这里有演示问题的示例代码: http://code.google.com/p/iui/source/browse/sandbox/hybrid/HybridiUI/Classes/HybridiUIAppDelegate.m
顺便说一句,同样的错误也存在于同样使用 webKit 的 Google Chrome 中。在 Chrome 中从本地文件加载网站时,数据库和 AJAX 调用是被禁止的,但从 Web 服务器加载时是允许的。
【讨论】:
以上是关于如何从磁盘加载的 JS 在 Mobile Safari 中打开数据库的主要内容,如果未能解决你的问题,请参考以下文章
Jquery Mobile - $ .mobile.changepage没有加载外部.JS文件
隐藏 Safari 组件时如何使用 jQuery Mobile 从错误加载页面中恢复?