SSWKURL icon indicating copy to clipboard operation
SSWKURL copied to clipboard

有时导致页面不能加载成功

Open yeskert opened this issue 4 years ago • 10 comments

get请求,页面加载失败。 没有找到原因,怀疑跟缓存的处理有关系。

yeskert avatar Feb 27 '21 14:02 yeskert

修改一下

    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)
        }
    }

luoei avatar Feb 28 '21 03:02 luoei

有很多h5页面确实没法成功,毕竟我只处理了普通的HTTP请求。 网易云音乐这篇文章里说了很多细节 https://juejin.cn/post/6922625242796032007 ,可以参考。精力所限无法填坑了抱歉~

lilidan avatar Mar 02 '21 08:03 lilidan

非常感谢!

修改一下

    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); }

yeskert avatar Mar 06 '21 08:03 yeskert

有很多h5页面确实没法成功,毕竟我只处理了普通的HTTP请求。 网易云音乐这篇文章里说了很多细节 https://juejin.cn/post/6922625242796032007 ,可以参考。精力所限无法填坑了抱歉~

感谢🙏

yeskert avatar Mar 06 '21 08:03 yeskert

非常感谢!

修改一下

    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 确实解决了问题。想请教一下,这个方法有没有其他问题或风险?

YL-ok avatar Dec 03 '21 06:12 YL-ok

想咨询一下 你的 _didPerformRedirection:newRequest 这个方法如何实现呢?

OvergrowthZhang avatar Apr 15 '22 03:04 OvergrowthZhang