SwiftUI 中的 WKWebView 未在 macOS 上加载 HTML 字符串

MQu*_*iri 4 webkit wkwebview swiftui nsviewrepresentable

关于 StackOverflow 的第一个问题(对于针对 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是,预览画布不会加载 HTML(显示空窗口)。

然后我用 HTMLView() 替换 ContentView.Swift 中的默认 Text() 视图,并运行我的应用程序。

应用程序编译,但 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
Run Code Online (Sandbox Code Playgroud)

对上述任何帮助将不胜感激!

jn_*_*pdx 18

在 macOS 上,虽然这似乎不是必需的,但您需要在目标的“签名和功能”中将“传出连接(客户端)”设置为 true,以便加载 WKWebView,即使您是从字符串加载而不是从外部页面加载。

一旦我改变了这一点,你的例子就可以正常工作。

网络设置

  • 谢谢你,你拯救了这一天! (3认同)