Just migrated an app over to WKWebView
and was wondering if there is any possible way to \'preload\' multiple URLs, but only display one at a time?
I ha
A relatively straight-forward way to do this is to create five NSData
objects (asynchronoulsly), each initialized using the known urls. When you need to display one of them, you can convert the NSData
to a string, and then call WKWebView
's loadHTMLString
function to change the displayed page.
You can also preload five different WKWebView
instances and swap them in/out when you need a specific URL. This depends on your UI and interaction of course.
Use NSURLCache
Here is the code
Swift
// Create URLRequest
var request: URLRequest? = nil
if let url = URL(string: "YOUR_URL") {
request = URLRequest(url: url)
}
// Check the cache.
var cachedResponse: CachedURLResponse? = nil
if let request = request {
cachedResponse = URLCache.shared.cachedResponse(for: request)
}
print(cachedResponse != nil ? "Cached response found!" : "No cached response found.")
// Load the cache
do {
if let request = request {
try NSURLConnection.sendSynchronousRequest(request, returning: nil)
}
} catch {
}
Obj-C
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"YOUR_URL"]];
// Check the cache.
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSLog(cachedResponse ? @"Cached response found!" : @"No cached response found.");
//Load cache
[NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:NULL];
I ended up just using NSURLCache and preloading all URLs using NSURLRequest and NSURLConnection. Then whenever I load a url into WKWebView it uses the cached requests per my cache policy.