有时导致页面不能加载成功
get请求,页面加载失败。 没有找到原因,怀疑跟缓存的处理有关系。
修改一下
public override func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
webView.reload()
}
public func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
// iOS 11上面需要重新加载一次,如果你这里有问题再添加
if needRestartLoad {
needRestartLoad = false
loadUrl(uri)
}
}
/// 解决拦截请求后,302转发无效情况
public override func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
/// 有问题再自己添加
if #available(iOS 11.0, *) {
if (webView.url?.absoluteString ?? "").contains("修改为自己的api域名"), let targetUrl = navigationResponse.response.url {
decisionHandler(.cancel)
webView.load(URLRequest(url: targetUrl))
}else{
decisionHandler(.allow)
}
}else{
decisionHandler(.allow)
}
}
有很多h5页面确实没法成功,毕竟我只处理了普通的HTTP请求。 网易云音乐这篇文章里说了很多细节 https://juejin.cn/post/6922625242796032007 ,可以参考。精力所限无法填坑了抱歉~
非常感谢!
修改一下
public override func webViewWebContentProcessDidTerminate(_ webView: WKWebView) { webView.reload() } public func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { // iOS 11上面需要重新加载一次,如果你这里有问题再添加 if needRestartLoad { needRestartLoad = false loadUrl(uri) } } /// 解决拦截请求后,302转发无效情况 public override func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { /// 有问题再自己添加 if #available(iOS 11.0, *) { if (webView.url?.absoluteString ?? "").contains("修改为自己的api域名"), let targetUrl = navigationResponse.response.url { decisionHandler(.cancel) webView.load(URLRequest(url: targetUrl)) }else{ decisionHandler(.allow) } }else{ decisionHandler(.allow) } }
确实是302问题。 但主动load不能解决问题。 现在用了一个私有方法,可这不是解决之道。
- (void)URLSession:(NSURLSession *)session task:(nonnull NSURLSessionTask *)task willPerformHTTPRedirection:(nonnull NSHTTPURLResponse *)response newRequest:(nonnull NSURLRequest *)request completionHandler:(nonnull void (^)(NSURLRequest * _Nullable))completionHandler{ SSWKTaskDelegate *delegate = [self delegateForTask:task]; [delegate.schemeTask performSelector:@selector(_didPerformRedirection:newRequest:) withObject:response withObject:request]; completionHandler(request); }
有很多h5页面确实没法成功,毕竟我只处理了普通的HTTP请求。 网易云音乐这篇文章里说了很多细节 https://juejin.cn/post/6922625242796032007 ,可以参考。精力所限无法填坑了抱歉~
感谢🙏
非常感谢!
修改一下
public override func webViewWebContentProcessDidTerminate(_ webView: WKWebView) { webView.reload() } public func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { // iOS 11上面需要重新加载一次,如果你这里有问题再添加 if needRestartLoad { needRestartLoad = false loadUrl(uri) } } /// 解决拦截请求后,302转发无效情况 public override func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { /// 有问题再自己添加 if #available(iOS 11.0, *) { if (webView.url?.absoluteString ?? "").contains("修改为自己的api域名"), let targetUrl = navigationResponse.response.url { decisionHandler(.cancel) webView.load(URLRequest(url: targetUrl)) }else{ decisionHandler(.allow) } }else{ decisionHandler(.allow) } }确实是302问题。 但主动load不能解决问题。 现在用了一个私有方法,可这不是解决之道。
- (void)URLSession:(NSURLSession *)session task:(nonnull NSURLSessionTask *)task willPerformHTTPRedirection:(nonnull NSHTTPURLResponse *)response newRequest:(nonnull NSURLRequest *)request completionHandler:(nonnull void (^)(NSURLRequest * _Nullable))completionHandler{ SSWKTaskDelegate *delegate = [self delegateForTask:task]; [delegate.schemeTask performSelector:@selector(_didPerformRedirection:newRequest:) withObject:response withObject:request]; completionHandler(request); }
你好,使用_didPerformRedirection:newRequest 确实解决了问题。想请教一下,这个方法有没有其他问题或风险?
想咨询一下 你的 _didPerformRedirection:newRequest 这个方法如何实现呢?