2013-01-25 68 views
9

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

请注意,我没有使用PhoneGap。

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

更多详细信息: 只有在数据库尚不存在的情况下才会发生此异常。如果它已经存在,它按预期工作。调用openDatabase的函数在应用程序的另一部分中使用,并且工作得很好。

我到目前为止已经试过

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

编辑: 这是命令的样子:

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

是问题解决了......我面临同样的问题... – Aravin

+1

从来没有找出原因是什么。最后,我发现WebSQL的稳定性在我的需求不同的Android设备/版本上过于不一致,所以我最终编写了一个原生界面,结果证明它更好。虽然我不再需要这个问题的答案,但是出于好奇的缘故,我仍然有兴趣听到一个问题。 – Goldsmith

+0

我解决了这个问题..严格地说在设备就绪功能里面打开数据库.... – Aravin

回答

1

根据规范the spec,它只有两个

  • 用户代理原因可能提高SECURITY_ERR异常,而不是在请求违反策略决定时返回数据库对象(例如,如果用户代理是conf设置为不允许该页面打开数据库)。

  • 如果原产地是不是一个方案/主机/端口元组,则抛出一个异常SECURITY_ERR

+0

这两个调用具有相同的来源,并且用户代理在加载页面之前进行配置。 – Goldsmith

+0

应该有东西。我只能在你显示你的代码时才算出来 –

2

我发现它有与数据库的允许的大小做。 如果您尝试在iOS上打开一个大于50mb的数据库,会出现此错误。

+0

虽然如果你超过了大小限制,如果opendatabase导致完全相同的错误,我不会感到惊讶,但这里并不是这样。就像我说的,它在应用程序的另一部分中成功创建。另外,我已将限制设置为5 MB。 – Goldsmith

相关问题