WkWebView в MacOS остается пустым для локального или удаленного контента - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь создать приложение MacOS, которое может загружать веб-сайты и извлекать из них данные с помощью веб-просмотров, но я не могу загрузить веб-просмотры вообще, как с удаленным, так и с локальным контентом.

Я пытаюсь использовать очень маленькое веб-представление, встроенное в основной вид. (В конечном счете, я не хочу, чтобы это отображалось, или я хочу, чтобы оно было как можно меньшим - я просто хочу, чтобы отображаемый контент извлекал данные.) Вот так:

screenshot of my storyboard

Однако ни загрузка из удаленного URL, ни загрузка из локальной строки html теста не работают. Когда я нажимаю кнопку load-from-remote-url или кнопку load-from-local-test-string, оператор print, который я вставил туда, чтобы убедиться, что функция вызывается, печатается, но никаких изменений в веб-просмотр: он просто остается пустой белой коробкой. Это также не вызывает каких-либо ошибок.

Вот код ошибки:

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, поэтому этот предыдущий SO не решает проблему .

Как мне убедить WKWebView на самом деле, вы знаете, что-то показать? (MacOS 10.14.5, Swift 5, XCode 10.2.1)

1 Ответ

0 голосов
/ 07 июня 2019

А-а-а-а, я обнаружил проблему: очевидно, даже если вы не включите песочницу, WKWebView полностью потерпит неудачу без нее. Не только это, но оно молча терпит неудачу. Когда я включил песочницу, а затем включил исходящие соединения, все сразу заработало.

...