2011-12-14 63 views
3

我有一個使用UIWebview的應用程序,用於瀏覽不同的網站/網址。我需要一個類似於iOS移動Safari的「清除客戶端數據」選項「刪除所有網站數據」,以刪除Cookie /本地存儲。我知道如何做的餅乾,但我無法弄清楚如何刪除/清除後來(本地存儲)如何使用UIWebview刪除iOS應用程序的html5本地存儲

How to remove HTML5 persistant databases in UIWebView?討論了這一點,但我沒有看到如何適用於我的上述情況。 localStorage.clear()javascript需要在UIWebview的stringByEvaluatingJavaScriptFromString()方法中運行,但是這在我的測試中似乎沒有奏效。 上述方法的另一個問題是,localStorage是url/site特定的 - 但我想清除localStorage中的所有內容。

嘗試刪除/複製Appln/Library/WebKit/LocalStorage文件夾 - 但這沒有解決訪問限制錯誤。

任何建議/方向請嗎?

+0

您是否嘗試清空緩存目錄? – LombaX

回答

8

你應該能夠做到這一點清洗您的應用程序的緩存目錄的內容:

編輯:更新的代碼通過@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文件;-) 嘗試,讓我知道

+0

我可以刪除文件,但在啓動應用程序時,NSLog中會顯示一條消息:「已恢復:localStorage數據庫」,localStorage的值與往常一樣。 –

+0

順便說一句:你應該檢查這些函數的返回值,而不是檢查錯誤標誌,因爲使用'NSError'的方法不能保證實際上將指針設置爲'nil'。 –

+0

你是說即使沒有錯誤,錯誤指針(我在調用方法之前設置爲nil)可以設置爲某個值嗎?呃...我不知道。我會搜索一下。然而,我的代碼在錯誤的情況下沒有被阻止,只是提示;-) – LombaX

0

注意,那裏面,如果你使用PhoneGap的,你還必須清除其本地存儲緩存的內部備份:

//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]; 
    } 
} 
+0

它是一個phonegap應用程序嗎?你描述的緩存備份系統似乎是我在這裏看到的! https://m.getsatisfaction.com/nitobi#/topics/phonegapbuild_localstorage_on_ios_5_1它不應該是iOS的東西;-) – LombaX

+0

啊,好吧,現在這一切都有道理!我會調整我的答案。 –

相關問題