iOS 12 wkwebview не работает с перенаправлениями? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть базовое веб-представление, которое загружает веб-сайт с обратным прокси-сервером nginx, который просто перенаправляет его на другой сайт.Я могу загрузить его, используя 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.
}
}

IЯ пытался добавить следующее в мой 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 показывает, что он пытается загрузить примерно: blank, что странно, потому что опять же - он работает во всех других браузерах.На стороне nginx все, что я делаю, - это простое правило proxy_pass, и когда я нажимаю на него конечную точку в приложении, я вижу в журналах доступа nginx, что оно отвечает 200. У кого-нибудь есть ЛЮБЫЕ идеи?

1 Ответ

0 голосов
/ 10 июля 2019

У меня была такая же проблема, и я решил ее таким образом через 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)
}

Надеюсь, это поможет

...