我有一个Cocoa / Objective-C的应用程序,它嵌入了一个WebKit的web视图。我需要打开的数据库支持和本地存储。我知道这是可以做到-我有它在Safari中工作-但我无法找到如何设置这在我自己的应用程序的示例。 我发现这个(未回答)问题的SO它提供了一个例子,但正如原来不起作用。而事实上,(setDatabasesEnabled,setLocalStorageEnabled)没有在我的WebKit的定义。 (Xcode的3.2.5),尽管它们似乎存在,如果我定义他们自己。 任何人都可以提供如何启用本地数据库存储的基于WebKit的Cocoa应用程序的例子吗?非常感谢 CodeGo.net,如果这样的! 更新:我有工作...我是通过“数据库”与“本地存储”,这显然是完全不同的东西。下面是工作的代码:

WebPreferences* prefs = [webView preferences];
[prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];

这样的作品,但它需要_setLocalStorageDatabasePath,没有App Store的所以我修正问题现在是:有没有办法,使这项工作不使用,我发现在这个答案的WebDatabaseDirectory首选项键,可控制数据库的地方去。但我无法找到相应的密钥本地存储在源的任何地方。或者是有没有办法迫使本地存储的数据库,所以WebDatabaseDirectory键?任何想法?
本文地址 :CodeGo.net/234678/

------------------------------------------------------------------------------------------------------------------------- 
1. 我提交了这个代码在Mac App Store,苹果批准了:

WebPreferences* prefs = [webView preferences];
[prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];

他们是否会继续批准,我不知道,但他们允许它为我的应用程序为2011-01-29。更新:他们还批准了版本更新的应用程序,所以它已经经历了两次。 
2. 我要采取的Javascript,以Objective-C的引桥和储存所有的核心数据。设置的localStorage为false,然后建立一个JS对象和实例“localStorage中”与我的JavaScript开发者不会知道其中的差别 CodeGo.net,而且我已经有做的事情与空气(基本)。还有另一种方式离开localStorage的完好,即使它实际上并没有将它们存储在持久性数据库。该可通过在javascript中进行迭代,并从那里操纵,但我认为这将是干脆用自己的替换对象。 
3. 经过了很多痛苦,我找到了一种方法,使本地存储,并将它坚持跨应用程序正常运行。这个解决方案是专门针对OSX,但它可能适用于iOS的为好。 下载并添加这个头文件到您的项目。它不包括在XCode中的Webkit分布。 点击下载WebStorageManagerPrivate.h 添加到它,下面几行:

static NSString* _storageDirectoryPath();
+ (NSString *)_storageDirectoryPath;

这允许您检索WebKit的本地存储轨迹数据库的目录位置。这是由于在WebKit的一个bug重要的,如果你不存储在目录中的轨迹数据库的localStorage中的WebView文件,它们都将被删除所有其他运行您的应用程序。我没有看到一个办法在WebStorageManager代码来更改此位置为单个应用程序。它总是从优先读出。 包括WebStorageManagerPrivate.h在你的AppDelegate。

#include "WebStorageManagerPrivate.h"

您需要下载并包含在你的项目不包括在XCode中分布的另一头。将其保存为WebPreferencesPrivate.h 点击下载WebPreferencesPrivate.h 包括WebPreferencesPrivate.h在你的AppDelegate。

#include "WebPreferencesPrivate.h"

在下面的applicationDidFinishLaunching处理程序中的代码来初始化并启用localStorage中。你有一个IBOutlet'web视图'为的WebView你的代码

 NSString* dbPath = [WebStorageManager _storageDirectoryPath];
WebPreferences* prefs = [self.webView preferences];
NSString* localDBPath = [prefs _localStorageDatabasePath];
// PATHS MUST MATCH!!!! otherwise localstorage file is erased when starting program
if( [localDBPath isEqualToString:dbPath] == NO) {
[prefs setAutosaves:YES]; //SET PREFS AUTOSAVE FIRST otherwise settings aren't saved.
// Define application cache quota
static const unsigned long long defaultTotalQuota = 10 * 1024 * 1024; // 10MB
static const unsigned long long defaultOriginQuota = 5 * 1024 * 1024; // 5MB
[prefs setApplicationCacheTotalQuota:defaultTotalQuota];
[prefs setApplicationCacheDefaultOriginQuota:defaultOriginQuota];
[prefs setWebGLEnabled:YES];
[prefs setOfflineWebApplicationCacheEnabled:YES];
[prefs setDatabasesEnabled:YES];
[prefs setDeveloperExtrasEnabled:[[NSUserDefaults standardUserDefaults] boolForKey: @"developer"]];
#ifdef DEBUG
[prefs setDeveloperExtrasEnabled:YES];
#endif
[prefs _setLocalStorageDatabasePath:dbPath];
[prefs setLocalStorageEnabled:YES];
[self.webView setPreferences:prefs];
}

我希望这可以帮助其他人一直在努力,或仍与这个问题苦苦挣扎,直到它是在WebKit中正确固定。

objective-c ios webkit 本地存储local-storage的更多相关文章

  1. HTML5本地存储(Local Storage) 的前世今生

    长久以来本地存储能力一直是桌面应用区别于Web应用的一个主要优势.对于桌面应用(或者原生应用),操作系统一般都提供了一个抽象层用来帮助应用程序保存其本地数据 例如(用户配置信息或者运行时状态等). 常 ...

  2. html5本地存储 local storage

    HTML5 web storage, a better local storage than cookies. With HTML5, web pages can store data locally ...

  3. Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic

    Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic 1.1. ThreadLocal 设计模式1 1.2. ...

  4. iOS 图片本地存储、本地获取、本地删除

    在iOS开发中.经常用到图片的本地化. iOS 图片本地存储.本地获取.本地删除,可以通过以下类方法实现. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: ...

  5. HTML5 本地存储Web Storage简单了解

    ​HTML5本地存储规范,定义了两个重要的API :Web Storage  和  本地数据库Web SQL Database. 本地存储Web Storage 实际上是HTML4的cookie存储机 ...

  6. HTML5本地存储 Web Storage

    Web Storage基本介绍 HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API  sessionStorage 和 localStorage,二者的差异主要是数 ...

  7. 本地存储 web storage

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. html5本地存储web storage的简单使用

    html5的一个非常cool的功能,就是web storage,类似于之前的cookie,不过与之不同的是,web storage 拥有本地5兆的容量可以存储,而cookie却只有4K,这是完全不能比 ...

  9. IOS数据本地存储的四种方式--

    注:借鉴于:http://blog.csdn.net/jianjianyuer/article/details/8556024 在IOS开发过程中,不管是做什么应用,都会碰到数据保存问题.将数据保存到 ...

随机推荐

  1. java md5方法 for Android

    很简单的方法 public static String md5(String string) { byte[] hash; try { hash = MessageDigest.getInstance ...

  2. zookeeper环境的搭建

    接管条件:磁盘上原数据完全一样,而自动接管,则是由zookeeper 实现的 FailloverController:控制namenode状态:检查namenode:通过远程协议

  3. [codevs2230]黑白棋子

    题目链接 http://www.luogu.org/problem/show?pid=1259# http://codevs.cn/problem/2230/ 题目描述 有2n个棋子(n≥4)排成一行 ...

  4. scp 详细总结

    转自:http://www.ha97.com/4169.html scp命令跟cp命令类似,只不过cp命令是在同一台机器上用的,scp是在两台机器上复制传输数据的命令.scp实质相当于利用SSH协议来 ...

  5. 使用Cross-validation (CV) 调整Extreme learning Machine (ELM) 最优参数的实现(matlab)

    ELM算法模型是最近几年得到广泛重视的模型,它不同于现在广为火热的DNN. ELM使用传统的三层神经网络,只包含一个隐含层,但又不同于传统的神经网络.ELM是一种简单易用.有效的单隐层前馈神经网络SL ...

  6. Drupal安装及使用问题解决列表

    #1. 启动 Clean URL 修改Apache的配置文件(如httpd.conf),打开 LoadModule rewrite_module modules/mod_rewrite.so选项.然后 ...

  7. Codeforces182D - Common Divisors(KMP)

    题目大意 如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S1和S2,求它们的公共因子个数 题解 如果它们有公共因子,那么显然它们的最小公共因子肯定是 ...

  8. [深入浅出Cocoa]详解键值观察(KVO)及其实现机理

    一,前言 Objective-C 中的键(key)-值(value)观察(KVO)并不是什么新鲜事物,它来源于设计模式中的观察者模式,其基本思想就是: 一个目标对象管理所有依赖于它的观察者对象,并在它 ...

  9. SweetAlert 使用

    $(".delete").click(function(){ var work_name = $(this).data('name'); var item_id = $(this) ...

  10. spring boot 数据库连接池配置

    HikariCP 连接池配置: http://stackoverflow.com/questions/29650501/hikaricp-starts-when-mvn-spring-bootrun- ...