WKWebview-无法加载资源:请求超时

问题描述

您好,我有加载网页的WkWebview应用 这是我的wkwebview初始化代码

override func loadView() {
    let webConfiguration = WKWebViewConfiguration()
    let preferences = WKPreferences()
    preferences.javaScriptEnabled = true
    preferences.setValue(true,forKey: "DeveloperExtrasEnabled")
    webConfiguration.preferences = preferences
    browser = WKWebView(frame: .zero,configuration: webConfiguration)
            browser.navigationDelegate = self
    browser.uiDelegate = self
    view = browser
}

这是请求

let url = URL(string: urlString)
    request = URLRequest(url: url!,cachePolicy: .reloadIgnoringLocalAndRemoteCacheData,timeoutInterval: 360)
    browser.navigationDelegate = self
    browser.uiDelegate = self
    browser.load(request)

这工作正常,但是当我单击加载超过60s(这是默认请求超时间隔)的子页面时。我在Web检查器中收到此错误未能加载资源:请求超时 所以我的问题是。我可以更改所有请求的默认timeoutInterval吗?

PS:我确实尝试覆盖navigationDelegate方法。

func webView(_ webView: WKWebView,decidePolicyFor navigationAction: WKNavigationAction,decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { }

阻止连接,并向子页面加载新请求,但这没有用。

PS:在Safari中,仅在WKWebview中无法按预期加载子页面。

感谢您的回答或建议

解决方法

您需要处理第二次调用webView(_:decidePolicyFor:decisionHandler:)函数时的情况。 (通过修改后的URLRequest和新的timeoutInterval

类似的东西会起作用:

func webView(_ webView: WKWebView,decidePolicyFor navigationAction: WKNavigationAction,decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.request.timeoutInterval != 360 {
        var urlRequest = navigationAction.request
        urlRequest.timeoutInterval = 360
        decisionHandler(.cancel)
        webView.load(urlRequest)
    } else {
        decisionHandler(.allow)
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...