【问题标题】:WKWebView not loading webpage - renders blank screen in SwiftWKWebView 未加载网页 - 在 Swift 中呈现空白屏幕
【发布时间】:2018-05-11 11:47:59
【问题描述】:

此代码应加载 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)
    }
}

我已尝试更改“应用程序传输安全设置”以允许任意加载。没有改变任何东西。

截图:

查看层次结构:

模拟器的 Safari 调试控制台:

【问题讨论】:

  • 您的代码运行良好。我在演示中尝试过。我认为这可能是其他问题。
  • 我没有在我的应用程序中使用任何故事板文件。它的所有代码。
  • 何时调用loadView?是在viewDidLoad 之前还是之后?我没有看到它在任何地方被调用,这就是您实际创建 Web 视图的地方
  • 是的,代码来自苹果网站,但不知道为什么我不能让它工作。这是我第一次使用 WKWebView。
  • 是的。正如你所做的那样,它工作正常。在一个演示中仅尝试此代码。

标签: ios swift wkwebview


【解决方案1】:

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

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

您可以通过安装 AVG 防病毒软件并打开 webshield 来重现此问题。您的应用程序(在模拟器上)中的 WKWebview 不会加载任何内容。

我不明白为什么它不能在实际设备上运行。这可能是设备的另一个问题。我还删除了派生数据文件夹、实际应用程序并重新启动了设备。

感谢大家的回答和帮助。

【讨论】:

  • 成功了!该死的杀毒软件!
  • 只是一个简短的说明。我遇到了这个问题,我得到的和他的截图一样,但这是因为我在我们公司的 VPN 上。如果我离开 VPN,它就会显示网页。
【解决方案2】:

为 Mac 构建应用程序?

如果您正在为 Mac 构建应用程序,请确保在您的目标中打开 App Sandbox ON 并勾选 Networks Outgoing Connections。


更新:如果您喜欢较长的路,请将以下内容添加到 YourAppName.entitlements

<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>

【讨论】:

  • 伙计,你太棒了,等了 2 天,没有你的代码 sn-p 解决方案是不完整的。谢谢老兄。
  • 非常感谢,我刚刚浪费了半个小时
  • 疯狂的是,即使webView.loadHTMLString 在不允许传出连接时也会失败??‍♂️
  • 非常感谢!你拯救了我的一天。
【解决方案3】:

所有设备的自动布局和常量 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
}}

在 info.plist 中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

【讨论】:

    【解决方案4】:

    以下代码在 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")!))
        }
    
    }
    

    结果如下:

    【讨论】:

    • 它很奇怪,但对我来说仍然是空白屏幕。
    • @ShrikantChidgopkar 您是否尝试过使用其他网址?
    • 是的。我尝试了几个不同的网站,使用 http、https、删除 www
    • @ShrikantChidgopkar 尝试使用WKWebViewisLoading 属性进行调试。
    • 问题是由 AVG 防病毒软件的 Webshield 引起的。
    【解决方案5】:

    你可以试试下面的代码

    import UIKit
    import WebKit
    
    class WebViewController: UIViewController {
    
    var wkWebview: WKWebView!
    
     override func viewDidLoad() {
    
       super.viewDidLoad()
    
        var Ycord : CGFloat = 0.0 // for top space 
        if UIScreen.main.bounds.height == 812 { //Check for iPhone-x
            Ycord = 44.0
        }
        else {
            Ycord = 20.0
        }
    
        let frame = CGRect(x: 0.0, y: Ycord, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-Ycord)
    
        self.wkWebview = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
        self.wkWebview.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        self.wkWebview.uiDelegate = self
        self.view.addSubview(self.wkWebview)
    
        DispatchQueue.main.async {
    
            self.wkWebview.load(URLRequest(url:URL(string: "https://www.apple.com")!))
        }        
     }
    }
    

    输出

    【讨论】:

    • 请尝试现在我更改了一些代码。希望它会工作
    • 还是一样的东西。
    • 我已经测试了上面的代码,它对我有用。附上截图。请尝试上面的代码
    • 使用此代码,我在导航栏下方得到一个黑条,下方是一个空白屏幕。我将在我的问题中添加屏幕截图
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2021-05-17
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多