在遭受了很多痛苦和挫折后,我找到了一种方法来启用本地存储并使其在应用程序运行期间持久化。这个解决方案专门针对OSX,但它也可能适用于iOS。
下载并将此头文件添加到您的项目中。它未包含在XCode Webkit分发中。
点击下载WebStorageManagerPrivate.h
在其中添加以下几行:
static NSString* _storageDirectoryPath();
+ (NSString *)_storageDirectoryPath;
这些代码可以让你获取WebKit本地存储跟踪器数据库的目录位置。这很重要,因为由于WebKit中的一个错误,在不将LocalStorage WebView文件存储在跟踪器数据库相同的目录中的情况下,它们会在你运行应用程序的每隔一次就被删除。我没有在WebStorageManager代码中找到更改单个应用程序位置的方法。它总是从用户首选项中读取。
在你的appDelegate中包含WebStorageManagerPrivate.h文件。
您需要下载并包含另一个头文件,该文件未包含在XCode分发中。请将其保存为WebPreferencesPrivate.h。
点击此处下载WebPreferencesPrivate.h
将WebPreferencesPrivate.h包含在您的appDelegate中即可。
现在,在你的applicationDidFinishLaunching处理程序中使用以下代码初始化并启用LocalStorage。该代码假定你有一个名为“webView”的IBOutlet,用于你正在使用的WebView。
NSString* dbPath = [WebStorageManager _storageDirectoryPath];
WebPreferences* prefs = [self.webView preferences];
NSString* localDBPath = [prefs _localStorageDatabasePath];
if( [localDBPath isEqualToString:dbPath] == NO) {
[prefs setAutosaves:YES];
static const unsigned long long defaultTotalQuota = 10 * 1024 * 1024;
static const unsigned long long defaultOriginQuota = 5 * 1024 * 1024;
[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彻底修复这个问题。