как удалить html5 локальное хранилище приложения iOS с помощью UIWebview - PullRequest
3 голосов
/ 14 декабря 2011

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 05 ноября 2012

У вас должна получиться очистить содержимое каталога 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 голос
/ 05 ноября 2012

Обратите внимание, что если вы используете 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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...