用途
swiftui-webkit 用于在 SwiftUI 中实现原生的 WebKit 集成,通过新的 WebView 结构体和 WebPage 可观察类完成网页展示与交互,取代过去的 WKWebView 加 UIViewRepresentable 或 NSViewRepresentable 桥接方案。
主要能力
资料给出的能力包括:从 URL 创建 WebView;使用 WebPage 进行导航控制,如加载 URL、加载 HTML 字符串、加载数据、重新加载、停止加载以及前进后退;执行异步 JavaScript 并传入参数;在指定内容世界中调用 JavaScript;监听导航事件状态(started、finished、failed 等);通过 WebPage.NavigationDeciding 协议自定义导航决策;注册自定义 URL Scheme 处理器;对网页内容进行快照、生成 PDF 和 Web 归档数据;以及为 WebView 添加多种视图修饰符,例如前后导航手势、缩放手势、链接预览、文本选择、内容背景和元素全屏行为。
使用方式
基础用法是直接使用 WebView(url:),并可通过 frame 设定尺寸。需要完整控制时,声明 @State private var page = WebPage(),将 page 传入 WebView,并在 onAppear 中调用 page.load(URLRequest(url:))。配置通过 WebPage.Configuration() 完成,例如 loadsSubresources、defaultNavigationPreferences.allowsContentJavaScript、websiteDataStore(.default() 为持久化,.nonPersistent() 为临时),并可设置 customUserAgent。文本搜索使用 .findNavigator(isPresented:)。JavaScript 通过 try await page.callJavaScript(...) 调用。导航事件通过 onChange(of: page.currentNavigationEvent) 监听。自定义导航决策需实现 WebPage.NavigationDeciding 协议,并在创建 WebPage 时传入。自定义 URL Scheme 通过 config.setURLSchemeHandler(_:forURLScheme:) 注册。内容捕获使用 page.snapshot、page.pdf 或 page.webArchiveData。
适用场景
适用于需要在 SwiftUI 界面中嵌入网页、控制网页加载与导航、与网页进行 JavaScript 交互、拦截或放行特定导航、提供自定义 URL 协议内容,以及生成网页截图或 PDF 的 SwiftUI 应用开发。
限制
资料特别强调应避免使用旧模式:不使用 WKWebView 加 UIViewRepresentable 或 NSViewRepresentable 桥接,不使用 WKWebViewConfiguration(改用 WebPage.Configuration),不使用 WKNavigationDelegate(改用 WebPage.NavigationDeciding),不使用 evaluateJavaScript(:)(改用异步的 page.callJavaScript(:)),不将 WKUserContentController 用于消息传递(改用带参数的 callJavaScript)。除上述内容外,关于运行平台版本、价格、收费方式等信息暂未提供。