2011-12-14 2 views
3

У меня есть приложение, которое использует UIWebview, которое используется для просмотра различных сайтов/URL-адресов. Мне нужен вариант «очистить данные клиента», аналогичный мобильному Safari для iOS «Удалить все данные веб-сайта», который удаляет файлы cookie/локальное хранилище. Я знаю, как делать куки, но я не могу понять, как удалить/очистить позднее (локальное хранилище)Как удалить html5 локальное хранилище приложения iOS с помощью UIWebview

How to remove HTML5 persistant databases in UIWebView? обсудил это, но я не видел, как это работает для моего вышеприведенного случая. localStorage.clear() javascript необходимо запустить в режиме UIWebview stringByEvaluatingJavaScriptFromString(), но это, похоже, не работало в моем тестировании. Другая проблема с вышеприведенным подходом заключается в том, что localStorage - это URL-адрес/сайт, но я хочу очистить все содержимое внутри localStorage.

Пробовал удалить/скопировать папку Appln/Library/WebKit/LocalStorage - но это не сработало с ошибками ограничения доступа.

Любые предложения/направления, пожалуйста?

+0

Вы пытались очистить каталог кеша? – LombaX

ответ

8

Вы должны быть в состоянии сделать это очистка содержимого каталога кэширует вашего приложения:

EDIT: Код обновления как предложено @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

BTW: вы должны проверить возвращаемое значение этих функций вместо проверки флага ошибки, потому что методы, которые используют '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

Это приложение для телефонных звонков? Система резервного копирования кэша, которую вы описываете, кажется той, что я видел здесь! https://m.getsatisfaction.com/nitobi#/topics/phonegapbuild_localstorage_on_ios_5_1 это не должно быть iOS;;) – LombaX

+0

А, хорошо, теперь все имеет смысл! Я отрегулирую свой ответ. –

Смежные вопросы