WKWebView无法加载网页 - 在Swift中呈现空白屏幕

Shr*_*kar 8 ios swift wkwebview

此代码应该加载Apple主页,而是显示一个空白屏幕.
HTTP和HTTPS URL都会发生这种情况.

码:

import UIKit
import WebKit

class WebViewController: 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()

        view.backgroundColor = .red

        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试更改"应用传输安全设置"以允许任意加载.没有改变什么.

截图:

查看层次结构

捕获的视图层次结构截图

用于模拟器的Safari调试控制台:

Safari调试控制台截图

在此输入图像描述

Shr*_*kar 10

我找到了解决方案.问题是由AVG AntiVirus的webshield引起的.出于某种原因,AVG webshield将来自模拟器的所有网络通信视为欺诈性的.以下屏幕截图显示了在模拟器上运行的safari应用程序.它说www.apple.com不安全或任何其他网站.

Safari截图

以下屏幕截图来自system.log,显示webkit的错误.

系统日志

您可以通过安装AVG防病毒并打开webshield来复制此问题.你的应用程序中的WKWebview(在模拟器上)不会加载任何东西.

我不明白为什么它不适用于实际的设备.这可能是该设备的另一个问题.我还删除了派生数据文件夹,实际应用程序并重新启动了设备.

谢谢大家的答案和帮助.


Fab*_*bio 7

自动布局和所有设备的常量 10 的正确方法:

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {

let webView = WKWebView()

override func viewDidLoad() {
    super.viewDidLoad()
    setupWebView()
}

fileprivate func setupWebView() {
    webView.uiDelegate = self
    webView.translatesAutoresizingMaskIntoConstraints = false
    DispatchQueue.main.async {
        guard let url = URL(string: "http://www.apple.com") else { return }
        self.webView.load(URLRequest(url: url))
    }
    view.addSubview(webView)
    webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
    webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 10).isActive = true
    webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true
    webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 10).isActive = true
}}
Run Code Online (Sandbox Code Playgroud)

在 info.plist 中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Run Code Online (Sandbox Code Playgroud)


Sam*_*her 6

以下代码在 Xcode 9.3 中对我来说工作得很好:

import UIKit
import WebKit

class ViewController: UIViewController {

    var webView: WKWebView!

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

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.load(URLRequest(url: URL(string: "https://www.apple.com")!))
    }

}
Run Code Online (Sandbox Code Playgroud)

结果如下:

iOS 模拟器中的 WKWebView。


Mic*_*ick 5

为Mac构建应用程序?

如果要为Mac开发应用程序,请确保上交App Sandbox ON目标并勾选“ Networks传出连接”。

在此处输入图片说明


更新:如果您更喜欢长途旅行,请将以下内容添加到 YourAppName.entitlements

<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

  • 伙计,你太棒了,等了 2 天,没有你的代码片段就没有解决方案是完整的。谢谢老兄。 (2认同)
  • 疯狂的是,当不允许传出连接时,即使`webView.loadHTMLString` 也会失败 ‍♂️ (2认同)