【问题标题】:iOS 12 wkwebview not working with redirects?iOS 12 wkwebview 不支持重定向?
【发布时间】:2019-03-12 02:54:24
【问题描述】:

我有一个基本的 webview 加载一个网站,该网站前面有一个 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.
}
}

我尝试将以下内容添加到我的 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 开发工具对其进行调试时,它显示它正在尝试加载 about:blank,这很奇怪,因为再次 - 它适用于所有其他浏览器。在 nginx 方面,我所做的只是一个简单的 proxy_pass 规则,当我点击应用程序中的端点时,我可以在 nginx 访问日志中看到它以 200 响应。有人有任何想法吗?

【问题讨论】:

  • 如何将 WKWebView 添加为子视图(不要使用 loadView)?
  • 我使用了苹果网站的步骤作为参考; developer.apple.com/documentation/webkit/wkwebview。将它用作子视图将如何解决我的问题?
  • 能给我你的测试网址吗?

标签: swift xcode nginx wkwebview ios12


【解决方案1】:

我遇到了同样的问题,我通过 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)
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多