WKWebView:是否可以预加载多个 URL?
WKWebView: Is it possible to preload multiple URLs?
刚刚将一个应用程序迁移到 WKWebView
,想知道是否有任何可能的方法 'preload' 多个 URL,但一次只显示一个?
我有一个包含 5 个网址的列表。我已经知道我会在某个时间点显示,我想通过预加载这些来加快体验速度,以便在单个 WKWebView
.
中使用
一个相对直接的方法是创建五个 NSData
对象(异步),每个对象都使用已知的 url 进行初始化。当需要显示其中一个时,可以将NSData
转换为字符串,然后调用WKWebView
的loadHTMLString
函数来改变显示的页面。
您还可以预加载五个不同的 WKWebView
实例,并在需要特定 URL 时交换它们 in/out。这当然取决于您的 UI 和互动。
我最终只使用了 NSURLCache 并使用 NSURLRequest 和 NSURLConnection 预加载了所有 URL。然后,每当我将 url 加载到 WKWebView 时,它都会根据我的缓存策略使用缓存的请求。
使用 NSURLCache
这是代码
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];
刚刚将一个应用程序迁移到 WKWebView
,想知道是否有任何可能的方法 'preload' 多个 URL,但一次只显示一个?
我有一个包含 5 个网址的列表。我已经知道我会在某个时间点显示,我想通过预加载这些来加快体验速度,以便在单个 WKWebView
.
一个相对直接的方法是创建五个 NSData
对象(异步),每个对象都使用已知的 url 进行初始化。当需要显示其中一个时,可以将NSData
转换为字符串,然后调用WKWebView
的loadHTMLString
函数来改变显示的页面。
您还可以预加载五个不同的 WKWebView
实例,并在需要特定 URL 时交换它们 in/out。这当然取决于您的 UI 和互动。
我最终只使用了 NSURLCache 并使用 NSURLRequest 和 NSURLConnection 预加载了所有 URL。然后,每当我将 url 加载到 WKWebView 时,它都会根据我的缓存策略使用缓存的请求。
使用 NSURLCache
这是代码
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];