MacOS中的WkWebView在本地或远程内容上保持空白

时间:2019-06-06 20:51:45

标签: swift macos cocoa webkit wkwebview

我正在尝试构建一个MacOS应用程序,该应用程序可以使用webviews加载网站并从中提取数据,但是无论是远程内容还是本地内容,我都无法加载webviews。

我正在尝试使用嵌入到主视图中的非常小的Web视图。 (最终,我实际上并不想显示它,或者我希望它尽可能小-我只希望呈现的内容提取数据。)像这样:

screenshot of my storyboard

但是,从远程URL加载或从本地测试html字符串加载均无效。当我单击“从远程URL加载”按钮或“从本地测试字符串加载”按钮时,为了确保该函数被调用,我在其中输入了print语句,但对于webview:它只是一个空白的白框。它也不会引发任何类型的错误。

这是失败的代码:

webViewTools.swift:

import Foundation
import WebKit

extension WKWebView {
    func load(_ urlString: String) {
        guard let url = URL(string: urlString) else {
            print("can't make url")
            return
        }
        let request = URLRequest(url: url)
        load(request)
    }
}

let testHtml =  "<html><body><h1>Hello World</h1></body></html>"

extension WKWebView {
    func test(){
        loadHTMLString(testHtml, baseURL: nil)
        }
}

ViewController.swift:

import Cocoa
import WebKit

class ViewController: NSViewController {

    @IBOutlet var webView: WKWebView!

    @IBAction func loadButtonPressed(_ sender: Any) {
        webView.load("https://www.apple.com/")
        print("trying to load from remote")
    }

    @IBAction func linkButtonPressed(_ sender: Any) {
        webView.test()
        print("trying to load local string")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

注意:未启用沙箱,并且已在info.plist的“应用程序传输安全设置”条目中添加了“允许任意加载”,因此this prior SO无法解决问题。

我如何说服WKWebView实际显示某些内容? (MacOS 10.14.5,Swift 5,XCode 10.2.1)

1 个答案:

答案 0 :(得分:0)

啊,我发现了问题:显然,即使您不打开沙箱,没有它,WKWebView也会完全失败。不仅如此,它还会无声地失败。当我打开沙盒,然后启用传出连接时,所有内容立即开始工作。