ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-12-08 00:37:39  阅读:271  来源: 互联网

标签:sqlite webkit local-storage local javascript


介绍

我使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有