objective-c ios webkit 本地存储local-storage

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

时间: 2024-10-06 13:15:02

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

【HTML5与CSS3基础】HTML5本地存储 Web Storage

概述 本地存储Web Storage实际上是HTML4的Cookies存储机制的一个改进版本.它的作用是在网站中把有用的信息存储到本地的计算机或移动设备上,然后根据需要从本地读取信息. Web Storage 有两种存储类型的API: sessionStorage localStorage 两者之间的差别在于生命周期:前者在会话期间有效:后者永久存储在本地,除非用户或程序对其执行删除操作. 浏览器支持情况:IE8.0以上,Chrome3.0以上. API介绍 浏览器支持情况检测 <!DOCTYP

HTML5本地存储 Web Storage

Web Storage基本介绍 HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API  sessionStorage 和 localStorage,二者的差异主要是数据的保存时长及数据的共享方式. localStorage 一直存储在本地,数据存储是永久的,除非用户或程序对其进行删除操作: sessionStorage在会话期内有效,数据在浏览器关闭后自动删除: localStorage是基于域的,任何在该域内的页面都可以访问, sessionStorage在保

IOS-本地存储-NSUserDefaults

We consider permutations of the numbers 1,..., N for some N. By permutation we mean a rearrangment of the number 1,...,N. For example 2  4  5  1  7  6  3  8 is a permutation of 1,2,...,8. Of course, 1  2  3  4  5  6  7  8 is also a permutation of 1,2

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

注:借鉴于:http://blog.csdn.net/jianjianyuer/article/details/8556024 在IOS开发过程中,不管是做什么应用,都会碰到数据保存问题.将数据保存到本地,能够让程序更加流畅,不会出现让人厌恶的菊花状,使得用户的体验更好.下面是介绍数据保存的方式 第一.NSKeyedArchiver:采用归档的形式来保存数据.(归档——解档)———大量数据和频繁读写不合适使用 1.归档器的作用是将任意的对象集合转换为字节流.这听起来像是NSPropertyLis

HTML5 本地存储Web Storage简单了解

?HTML5本地存储规范,定义了两个重要的API :Web Storage  和  本地数据库Web SQL Database. 本地存储Web Storage 实际上是HTML4的cookie存储机制的一个改进版本,然而两种机制的功能又不相同.web storage 的作用是在网站中把有用的信息存储到本地的计算机 或移动设备上,然后根据实际需要从本地读取信息. web storage 提供了两种存储类型API接口:sessionStorage 和 localStorage .sessionSt

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

在iOS开发中.经常用到图片的本地化. iOS 图片本地存储.本地获取.本地删除,可以通过以下类方法实现. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color

THML5本地存储 Web Storage

Web Storage 介绍 HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API  sessionStorage 和 localStorage,二者的差异主要是数据的保存时长及数据的共享方式. ? localStorage 一直存储在本地,数据存储是永久的,除非用户或程序对其进行删除操作: ? sessionStorage在会话期内有效,数据在浏览器关闭后自动删除: localStorage是基于域的,任何在该域内的页面都可以访问, sessionStorag

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

html5的一个非常cool的功能,就是web storage,类似于之前的cookie,不过与之不同的是,web storage 拥有本地5兆的容量可以存储,而cookie却只有4K,这是完全不能比的优势. webstrange又分为:localstorage,sessionstorage和本地数据库. 接下来我就来一一介绍: 1 localstorage  localstorage 的使用比较简单,方法有: localStorage.setItem(key,value);//保存数据 loc

IOS中本地存储和查看json数据

1.代码创建json文件,并保存到本地 第一步.设置json文件的保存路径 NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/myJson.json"]; NSLog(@"%@",filePath); 第二步.准备存储数据 NSMutableArray *arr = [[NSMutableArray alloc]init]; //用来盛放数据的value NSDi