数据库
首页 > 数据库> > javascript-localStorage和“文件:”协议不持久,SQLite提供SECURITY_ERR

javascript-localStorage和“文件:”协议不持久,SQLite提供SECURITY_ERR

作者:互联网

介绍

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

我想使用localStorage或SQLite存储工具栏的一些设置.我已经阅读了有关indexedDB的一些信息,尽管我没有找到有关如何使用它的具体实现.

localStorage问题

当我处于预览模式时,localStorage可以正常工作,当我在编辑器和预览模式之间切换时,URL(location.href)会稍作更改:

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更改为
文件143873968-29

我读到的有关localStorage的内容,基本上就是FireFox的globalStorage [location.hostname].据我所知,Safari不支持globalStorage,所以我无法尝试.

SQLite问题

当我尝试打开数据库时:

var shortName = 'mydatabase';
var version = '1.0';
var displayName = 'My Important Database';
var maxSize = 65536; // in bytes
var db = openDatabase(shortName, version, displayName, maxSize);

我在控制台中得到这个:

SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent.

这基本上解决了我的问题,我将不胜感激任何答案或评论.

解决方法:

使用以下解决方案:Implementing a WebView database quota delegate进行了一些修改,我得以使其工作.

以下委托方法为我工作(放在您的webViewDelegate中):

- (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,这会导致在上面得到模糊的错误消息.在没有足够空间的情况下尝试创建数据库后,将调用上述方法.请注意,此方法是在WebUIDelegatePrivate.h(http://opensource.apple.com/source/WebKit/WebKit-7533.16/mac/WebView/WebUIDelegatePrivate.h)中定义的,并且使用该方法可能会阻止您将应用程序提交到Mac App Store.

标签:sqlite,webkit,local-storage,local,javascript
来源: https://codeday.me/bug/20191207/2087367.html