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 загружался, даже если вы загрузка из строки, а не с внешней страницы.
Как только я изменил это, ваш пример заработал нормально.