WKWebView в SwiftUI не загружает строку HTML в macOS

первый вопрос о StackOverflow (и относительно новый для разработчиков нативных приложений, ориентированных на macOS).

В настоящее время я пытаюсь создать простое представление SwiftUI, которое использует функцию loadHTMLString WKWebView для отображения жестко запрограммированной строки HTML на экране.

Веб-кит AFAIK на данный момент не поддерживает SwiftUI, поэтому мне нужно встроить пользовательский интерфейс AppKit в мое приложение SwiftUI с помощью NSViewRepresentable. Это то, что я получил до сих пор, следуя документам и автозаполнению XCode:

      import SwiftUI
import WebKit

struct HTMLView: NSViewRepresentable {
    typealias NSViewType = WKWebView
    
    let html = "<h1>Hello wordl</h1>"

    func makeNSView(context: Context) -> WKWebView {
        let webview = WKWebView()
        return webview
    }
    
    func updateNSView(_ nsView: WKWebView, context: Context) {
        nsView.loadHTMLString(html, baseURL: nil)
    }
}

struct HTMLView_Previews: PreviewProvider {
    static var previews: some View {
        HTMLView()
    }
}

Следует отметить, что холст предварительного просмотра не загружает HTML(отображает пустое окно).

Затем я заменяю представление Text() по умолчанию в ContentView.Swift на HTMLView() и запускаю свое приложение.

Приложение компилируется, но WebView не может загрузить HTML(я получаю пустое окно). Я получаю следующие ошибки в консоли:

      WebPageProxy::processDidTerminate: (pid 0), reason 3
WebPageProxy::dispatchProcessDidTerminate: reason = 3
WebPageProxy::processDidTerminate: (pid 0), reason 3
WebPageProxy::dispatchProcessDidTerminate: reason = 3
WebPageProxy::tryReloadAfterProcessTermination: process crashed and the client did not handle it, not reloading the page because we reached the maximum number of attempts

Любая помощь с вышеперечисленным будет высоко оценена!

1 ответ

В macOS, хотя это не кажется необходимым, вам нужно установить для «Исходящие подключения (клиент)» значение true в «Подписание и возможности» на вашей цели, чтобы WKWebView загружался, даже если вы загрузка из строки, а не с внешней страницы.

Как только я изменил это, ваш пример заработал нормально.

Другие вопросы по тегам