首页 技术 正文
技术 2022年11月16日
0 收藏 917 点赞 2,561 浏览 3087 个字

我有一个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中正确固定。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,945
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,471
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,284
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,100
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,732
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,767