如何使用UIWebview删除iOS应用程序的html5本地存储

时间:2011-12-14 06:29:51

标签: ios html5 uiwebview

我有一个使用UIWebview的应用程序,用于浏览不同的网站/网址。我需要一个选项“清除客户端数据”类似于iOS移动safari“删除所有网站数据”,删除cookie /本地存储。我知道如何做cookie但我无法弄清楚如何删除/清除以后的(本地存储)

How to remove HTML5 persistant databases in UIWebView?讨论了这一点,但我没有看到这对我的上述案例有何用处。 localStorage.clear()javascript需要在UIWebview stringByEvaluatingJavaScriptFromString()方法中运行,但这似乎在我的测试中没有用。 上述方法的另一个问题是,localStorage是url / site特定的 - 但我想清除localStorage中的所有内容。

尝试删除/复制Appln / Library / WebKit / LocalStorage文件夹 - 但这并没有解决访问限制错误。

有任何建议/指示吗?

2 个答案:

答案 0 :(得分:8)

您应该能够清理应用程序的Caches目录的内容:

编辑:由于错误管理错误,更新了@RaphaelSchweikert建议的代码。

// first, remove the cookies. 
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
    [storage deleteCookie:cookie];
}

NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
for (NSString *string in array) {
    NSLog(@"Removing %@", [path stringByAppendingPathComponent:string]);
if ([[string pathExtension] isEqualToString:@"localstorage"])
    [[NSFileManager defaultManager] removeItemAtPath:[path stringByAppendingPathComponent:string] error:nil];
}

在我的模拟器上的那个文件夹中,我看到很多.localstorage文件;-) 试试让我知道

答案 1 :(得分:1)

请注意,如果您使用的是PhoneGap,则还必须清除localstorage缓存的内部备份:

//Remove the localstorage db
NSString *path = [[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"Backups"] stringByAppendingPathComponent:@"localstorage.appdata.db"];
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];

//Also remove the cached versions
path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
for (NSString *string in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil]) {
    if ([[string pathExtension] isEqualToString:@"localstorage"]) {
        [[NSFileManager defaultManager] removeItemAtPath:path error:nil];
    }
}