【问题标题】:SECURITY_ERR: DOM Exception 18 on openDatabaseSECURITY_ERR:openDatabase 上的 DOM 异常 18
【发布时间】:2013-01-09 12:35:51
【问题描述】:

我有一个基于 Web 的 Android 应用程序,它使用 WebSQL 进行存储。出于某种原因,在某一时刻调用openDatabase(响应按钮单击)会导致DOMException 带有消息"SECURITY_ERR: DOM Exception 18"

请注意,我没有使用 PhoneGap。

我在这里要问的主要问题是openDatabase 上的 DOMException 18 的可能原因是什么?

更多细节: 仅当数据库尚不存在时才会发生此异常。如果它已经存在,它将按预期工作。调用openDatabase 的函数在应用程序的另一部分中使用并且工作正常。

到目前为止我所做的尝试

  • 减少数据库的大小 - 应该不是问题,因为它是由应用程序的另一部分创建的。
  • 我已经检查了外部存储权限 - 再次,应该不是问题。
  • 我在某处读到,插入的 USB 电缆可能会导致此问题 - 而不是在这种情况下导致此问题的原因。

编辑: 这是命令的样子:

db = openDatabase('my_database', '1.0', 'My database description', 5*1024*1024, function() {});

【问题讨论】:

  • 这个问题解决了吗...我也面临同样的问题...
  • 从未发现原因是什么。最后,我发现 WebSQL 的稳定性在不同的 Android 设备/版本上无法满足我的需求,因此我最终编写了一个本地接口,结果证明它要好得多。虽然我不再需要这个问题的答案,但出于好奇,我仍然有兴趣听听。
  • 我解决了这个问题..在设备就绪功能中严格调用开放数据库....
  • 你在使用PhoneGap吗? (只是要求避免混淆,因为最初的问题是非PhoneGap)

标签: android html web-sql opendatabase


【解决方案1】:

我发现它与数据库的允许大小有关。 如果您尝试在 iOS 上打开大于 50mb 的 db,则会收到此错误。

【讨论】:

  • 如果超过大小限制,如果 opendatabase 导致完全相同的错误,我不会感到惊讶,但这里的情况并非如此。就像我说的,它是在应用程序的另一部分成功创建的。另外,我将限制设置为 5 MB。
【解决方案2】:

根据规范the spec ,只有两个原因

  • 如果请求违反策略决定(例如,如果用户代理配置为不允许页面打开数据库),用户代理可能会引发 SECURITY_ERR 异常而不是返回数据库对象。

  • 如果 origin 不是方案/主机/端口元组,则抛出 SECURITY_ERR 异常

【讨论】:

  • 两个调用具有相同的来源,并且在加载页面之前配置了用户代理。
  • 应该有什么。只有你出示你的代码我才能弄清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2013-03-12
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
相关资源
最近更新 更多