SwiftUI 中的 WKWebView 未在 macOS 上加载 HTML 字符串
WKWebView in SwiftUI not loading HTML string on macOS
关于 Whosebug 的第一个问题(对于针对 macOS 的本机应用程序开发者而言相对较新)。
我目前正在尝试构建一个简单的 SwiftUI 视图,它利用 WKWebView 的 loadHTMLString 函数在屏幕上显示硬编码的 HTML 字符串。
AFAIK webkit 目前不支持 SwiftUI,因此我需要使用 NSViewRepresentable 在我的 SwiftUI 应用程序中嵌入 AppKit UI。这是我到目前为止根据文档和 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()
}
}
需要注意的是预览canvas不加载HTML(显示空window)。
然后我将 ContentView.Swift 中的默认 Text() 视图替换为 HTMLView(),然后 运行 我的应用程序。
应用程序编译,但 WebView 无法加载 HTML(我得到一个空的 window)。我在控制台中收到以下错误:
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
如能提供上述任何帮助,我们将不胜感激!
在 macOS 上,虽然这似乎不是必需的,但您需要在目标上的“签名和功能”中将“传出连接(客户端)”设置为 true,以便加载 WKWebView,即使您是从字符串而不是外部页面加载。
我一更改此设置,您的示例就运行良好。
关于 Whosebug 的第一个问题(对于针对 macOS 的本机应用程序开发者而言相对较新)。
我目前正在尝试构建一个简单的 SwiftUI 视图,它利用 WKWebView 的 loadHTMLString 函数在屏幕上显示硬编码的 HTML 字符串。
AFAIK webkit 目前不支持 SwiftUI,因此我需要使用 NSViewRepresentable 在我的 SwiftUI 应用程序中嵌入 AppKit UI。这是我到目前为止根据文档和 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()
}
}
需要注意的是预览canvas不加载HTML(显示空window)。
然后我将 ContentView.Swift 中的默认 Text() 视图替换为 HTMLView(),然后 运行 我的应用程序。
应用程序编译,但 WebView 无法加载 HTML(我得到一个空的 window)。我在控制台中收到以下错误:
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
如能提供上述任何帮助,我们将不胜感激!
在 macOS 上,虽然这似乎不是必需的,但您需要在目标上的“签名和功能”中将“传出连接(客户端)”设置为 true,以便加载 WKWebView,即使您是从字符串而不是外部页面加载。
我一更改此设置,您的示例就运行良好。