gpt4 book ai didi

ios - iOS8中如何删除WKWebview的缓存?

转载 作者:行者123 更新时间:2023-11-28 06:38:54 25 4
gpt4 key购买 nike

如何在iOS8中删除WKWebview的Cache?对于 iOS 9,以下代码有效。

let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeCookies])
let date = NSDate(timeIntervalSince1970: 0)
WKWebsiteDataStore.defaultDataStore().removeDataOfTypes(websiteDataTypes as! Set<String>, modifiedSince: date, completionHandler:{ })

对于 iOS 8,我尝试了以下链接中的解决方案,但缓存没有被删除。

https://github.com/ShingoFukuyama/WKWebViewTips#cookie-cache-credential-webkit-data-cannot-easily-delete

How to remove cache in WKWebview?

remove cache in wkwebview objective c

How to delete WKWebview cookies

http://blogs.candoerz.com/question/128462/how-to-delete-wkwebview-cookies.aspx

http://atmarkplant.com/ios-wkwebview-tips/

非常感谢您的帮助。

最佳答案

我正在为 iOS 开发浏览器,想分享我们在这个问题上的经验。

首先,我们浏览器中的所有 webviews 通过单个 processPool 相互连接。它导致在所有 webView 之间共享 cookie。为此,我们将相同的 processPool 设置为 WKWebViewConfiguration,它被传递给新创建的 webView:

  WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
configuration.processPool = self.processPool;
WKWebView* webView = [[WKWebView alloc] initWithFrame:frame
configuration:configuration];

其次,数据删除的过程如下所示:

  1. 删除所有创建的 webView

  2. 删除带有缓存/cookie 的目录

  3. 创建新的进程池

  4. 使用新的进程池重新创建 webView

如果你有1个webView,整个过程应该是这样的:

- (void)clearWebViewData {
[self.webView removeFromSuperview];
self.webView = nil;

NSFileManager* fileManager = [NSFileManager defaultManager];
NSURL* libraryURL = [fileManager URLForDirectory:NSLibraryDirectory
inDomain:NSUserDomainMask
appropriateForURL:NULL
create:NO
error:NULL];
NSURL* cookiesURL = [libraryURL URLByAppendingPathComponent:@"Cookies"
isDirectory:YES];
[fileManager removeItemAtURL:cookiesURL error:nil];

NSURL* webKitDataURL = [libraryURL URLByAppendingPathComponent:@"WebKit" isDirectory:YES];
NSURL* websiteDataURL = [webKitDataURL URLByAppendingPathComponent:@"WebsiteData" isDirectory:YES];

NSURL* localStorageURL = [websiteDataURL URLByAppendingPathComponent:@"LocalStorage" isDirectory:YES];
NSURL* webSQLStorageURL = [websiteDataURL URLByAppendingPathComponent:@"WebSQL" isDirectory:YES];
NSURL* indexedDBStorageURL = [websiteDataURL URLByAppendingPathComponent:@"IndexedDB" isDirectory:YES];
NSURL* mediaKeyStorageURL = [websiteDataURL URLByAppendingPathComponent:@"MediaKeys" isDirectory:YES];

[fileManager removeItemAtURL:localStorageURL error:nil];
[fileManager removeItemAtURL:webSQLStorageURL error:nil];
[fileManager removeItemAtURL:indexedDBStorageURL error:nil];
[fileManager removeItemAtURL:mediaKeyStorageURL error:nil];

WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
configuration.processPool = [[WKProcessPool alloc] init];
self.webView = [[WKWebView alloc] initWithFrame:frame configuration:configuration];
[self.webView loadRequest:request];
}

我想提醒您注意,此代码仅适用于 iOS 8.x 的设备。它在模拟器中根本不起作用。

关于ios - iOS8中如何删除WKWebview的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38480867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com