在Objective-C(OC)与JavaScript(JS)交互的过程中,清除JavaScript缓存通常涉及到以下几个方面:
WKWebView
或UIWebView
时,浏览器会缓存网页资源,包括JavaScript文件,以提高加载速度。Cache-Control
、Expires
)来控制资源的缓存行为。WKWebView
的配置WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.websiteDataStore = WKWebsiteDataStore.nonPersistentDataStore;
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];
[self.view addSubview:webView];
nonPersistentDataStore
会禁用持久化存储,包括缓存。
if (@available(iOS 9.0, *)) {
NSSet *dataTypes = [NSSet setWithArray:@[
WKWebsiteDataTypeDiskCache,
WKWebsiteDataTypeMemoryCache,
WKWebsiteDataTypeCookies,
WKWebsiteDataTypeSessionStorage,
WKWebsiteDataTypeLocalStorage,
WKWebsiteDataTypeIndexedDBDatabases,
WKWebsiteDataTypeWebSQLDatabases
]];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:dataTypes modifiedSince:dateFrom completionHandler:^{
// 缓存清除完成
}];
} else {
// Fallback on earlier versions
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:path];
for (NSString *file in files) {
NSString *filePath = [path stringByAppendingPathComponent:file];
[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
}
}
在加载JavaScript文件时,可以通过设置HTTP请求头来控制缓存行为:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com/script.js"] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0];
[webView loadRequest:request];
NSURLRequestReloadIgnoringLocalCacheData
会忽略本地缓存,强制从服务器加载最新资源。
原因:浏览器缓存了旧的JavaScript文件。
解决方法:
NSString *jsURL = [NSString stringWithFormat:@"https://example.com/script.js?v=%@", [NSDate date]];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:jsURL] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0];
[webView loadRequest:request];
通过以上方法,可以有效清除JavaScript缓存,确保加载的是最新版本的文件。
领取专属 10元无门槛券
手把手带您无忧上云