web-dev-qa-db-ja.com

iOS 12 wkwebviewがリダイレクトで機能しませんか?

別のサイトに転送しているnginxリバースプロキシが前面にあるWebサイトをロードする基本的なWebビューがあります。デバイスとエミュレーター(およびコンピューター)でsafari、chrome firefoxなどを使用してロードできますが、wkwebviewにロードしようとすると、数回点滅してから移動しますこの同じアプリはiOS 10-11で正常に動作しましたが、iOS 12では機能しなくなりました。以下は、私が行っていることを示す簡単なコードの抜粋です。

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {

var webView: WKWebView!

override func loadView() {
    let webConfiguration = WKWebViewConfiguration()
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    view = webView
}

override func viewDidLoad() {
    super.viewDidLoad()

    let myURL = URL(string:"https://test.com")
    let myRequest = URLRequest(url: myURL!)
    webView.load(myRequest)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

Info.plistに以下を追加しようとしましたが、これも機能しませんでした。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>test.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubDomains</key>
            <true/>
        </dict>

また、xcodeのログにもこれが表示されます。

[BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2] . 
[0x7f82f8d0efc0] get output frames failed, state 8196

Safari Dev Toolsを使用してデバッグしようとすると、about:blankを読み込もうとしていることがわかります。これも奇妙なことです。これも、他のすべてのブラウザーで機能するためです。 nginx側では、単純なproxy_passルールを実行するだけで、アプリのエンドポイントに到達すると、nginxアクセスログで200で応答することがわかります。誰かアイデアはありますか?

7
Mitch Davis

私は同じ問題を抱えていて、WKNavigationDelegateを介してこの方法で解決しました。

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated {
        guard let url = navigationAction.request.url else {return}
        webView.load(URLRequest(url: url))
    }
    decisionHandler(.allow)
}

それが役に立てば幸い

1
Pablo Blanco