WKWebviewのタイムアウト設定について
WKWebviewのloadRequestで読み込んだwebページにタイムアウトの設定をしたいと思っております。
let configuration = WKWebViewConfiguration()
let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
let req = NSURLRequest(URL: "https://test.com/a.html", cachePolicy: .UseProtocolCachePolicy, timeoutInterval: 10.0)
print("loadRequest=\(req.timeoutInterval)") // -> 10秒になっている
webView.loadRequest(req)
上記ように、loadRequestで読み込んだページについては、設定通り10秒程で didFailProvisionalNavigation
Delegateが呼ばれます。
ただ、例えばhttps://test.com/a.html
にb.html
へのリンクをタップした時に、decidePolicyForNavigationAction
Delegateが呼ばれはするのですが、そこで下記のようにtimeoutInterval
を見てみると、上記で設定した値になっておりません。
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
let request = navigationAction.request
log("decidePolicyForNavigationAction \(request.URL?.absoluteString)=\(request.timeoutInterval)")
// ↑ https://test.com/b.html=2147483647.0 と表示される
}
また、この場合にdidFailProvisionalNavigation
Delegateは、前述の10秒程度ではなく、1分以上戻ってこない状態になってしまいます。(90〜120秒程で戻ってくる。)
http://qiita.com/laiso/items/00e9241c3b329b4d9cdc
上記サイトを参考にdecidePolicyForNavigationAction
Delegateを下記のようにしてみました。
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
let request = navigationAction.request
log("decidePolicyForNavigationAction \(request.URL?.absoluteString)=\(request.timeoutInterval)")
// ↑ https://test.com/b.html=2147483647.0 と表示される
if let url = request.URL?.absoluteString {
if (request.timeoutInterval != 10) {
let req = NSURLRequest(URL: url, cachePolicy: .UseProtocolCachePolicy, timeoutInterval: 10.0)
print("decidePolicyForNavigationAction=\(req.timeoutInterval)") // -> 10秒になっている
webView.loadRequest(req)
decisionHandler(.Cancel)
}
}
}
このようにすると、GETの処理ではうまくタイムアウト時間を設定出来たのですが、POSTの処理でパラメータが渡らずに意図した動きにはなりませんでした。
https://stackoverflow.com/questions/41409180/swift3-webview-with-post-request
上記のサイトのように、POSTの時にもパラメータを再設定し直して、loadRequestし直すと言うような、手間なことをしなければいけないのでしょうか?
もっとうまい方法をご存知の方がいらっしゃいましたら、ご教授頂けますと幸いでございます。
何卒、宜しくお願い致します。