首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >localStorage和“file:”协议不持久,SQLite给SECURITY_ERR

localStorage和“file:”协议不持久,SQLite给SECURITY_ERR
EN

Stack Overflow用户
提问于 2011-09-24 18:10:17
回答 2查看 3.2K关注 0票数 3

引言

我使用RapidWeaver - Mac OS应用程序,它不使用服务器环境。它有一个编辑器和预览模式。预览模式是一个基于Webkit的渲染器,我可以使用“检查元素”,就像您在Safari中通常所做的那样。

我希望使用localStorage或SQLite来存储工具栏的一些设置。我已经阅读了一些关于indexedDB的信息,尽管我没有发现关于如何使用它的具体实现。

localStorage存在的问题

当我保持预览模式时,当我在编辑器和预览模式之间切换时,localStorage工作得很好,url - location.href - is略有改变:

代码语言:javascript
复制
file:///private/var/folders/s7/x8y2s0sd27z6kdt2jjdw7c_c0000gn/T/TemporaryItems/RapidWeaver/98970/document-143873968-28/RWDocumentPagePreview/code/styled/index.html

file:///private/var/folders/s7/x8y2s0sd27z6kdt2jjdw7c_c0000gn/T/TemporaryItems/RapidWeaver/98970/document-143873968-29/RWDocumentPagePreview/code/styled/index.html

document-143873968-28转变为document-143873968-29

我所读到的关于localStorage的东西,基本上是globalStoragelocation.hostname for FireFox。据我所知,globalStorage在Safari中不受支持,所以我无法尝试。

SQLite存在的问题

当我试图打开一个数据库时:

代码语言:javascript
复制
var shortName = 'mydatabase';
var version = '1.0';
var displayName = 'My Important Database';
var maxSize = 65536; // in bytes
var db = openDatabase(shortName, version, displayName, maxSize);

我把这个放在我的控制台里:

代码语言:javascript
复制
SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent.

这基本上结束了我的问题,我将衷心感谢任何答复或评论。

EN

回答 2

Stack Overflow用户

发布于 2012-01-23 16:29:42

使用以下解决方案:Implementing a WebView database quota delegate,只要做一些修改,我就能让它正常工作。

下面的委托方法适用于我(在您的webViewDelegate中):

代码语言:javascript
复制
- (void)webView:(WebView *)sender frame:(WebFrame *)frame exceededDatabaseQuotaForSecurityOrigin:(id) origin database:(NSString *)databaseIdentifier
{
  static const unsigned long long defaultQuota = 5 * 1024 * 1024;
  if ([origin respondsToSelector: @selector(setQuota:)]) {
    [origin performSelector:@selector(setQuota:) withObject:[NSNumber numberWithLongLong: defaultQuota]];
  } else { 
    NSLog(@"could not increase quota for %@", defaultQuota); 
  }
}

默认情况下,数据库被赋予0字节,这将导致上面出现的模糊错误消息。当没有足够的空间时,在尝试创建数据库之后调用上述方法。请注意,此方法是在WebUIDrelatePrivate.h( http://opensource.apple.com/source/WebKit/WebKit-7533.16/mac/WebView/WebUIDelegatePrivate.h )中定义的,使用它可能会阻止您将应用程序提交到mac应用程序存储区。

票数 2
EN

Stack Overflow用户

发布于 2011-09-24 18:38:31

localStorage是一种html5机制,它比cookies给脚本更多的空间。Safari支持它:https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Name-ValueStorage/Name-ValueStorage.html

我不知道它对基于file:///的应用程序应该有什么路径限制,如果有的话。

编辑:进一步查看路径限制,我发现您得到的内容应该与Safari一起工作,FF最近修复了一个bug,使它无法在那里工作:https://bugzilla.mozilla.org/show%5Fbug.cgi?id=507361

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7540904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档