问题描述
您好,我有加载网页的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)
}
}