WebUI by Cybozu

WebUI 是一个 Swift 包,它提供了由 SwiftUI 封装的 WKWebView。

Github forks Github stars Github issues Github release Github license

要求

用法

使用 WebUI,您可以使用简单的 API 在 SwiftUI 中构建 WebView。

有关更深入的信息,请参阅API 文档

显示网页

使用 WebView(request:)

struct ContentView: View {
    var body: some View {
        WebView(request: URLRequest(url: URL(string: "https://example.com/")!))
    }
}

操作 WebView

使用 WebViewReader。在 WebViewReader 的作用域内,您可以接收 WebViewProxy
您可以通过 WebViewProxyWebViewReader 的作用域内操作 WebView

struct ContentView: View {
    var body: some View {
        WebViewReader { proxy in
            WebView()
                .onAppear {
                    proxy.load(request: URLRequest(url: URL(string: "https://www.example.com")!))
                }

            Button("Reload") {
                proxy.reload()
            }
        }
        .padding()
    }
}

自定义 WebView

使用 WebView(configuration:)

struct ContentView: View {
    let configuration: WKWebViewConfiguration

    init() {
        configuration = .init()
        configuration.allowsInlineMediaPlayback = true
    }

    var body: some View {
        WebView(configuration: configuration)
    }
}

还有其他有用的 API 可用。

struct ContentView: View {
    var body: some View {
        WebView()
            .allowsLinkPreview(true)
            .refreshable()
    }
}

与代理一起使用

使用 uiDelegate(_:), navigationDelegate(_:) 方法。

final class MyUIDelegate: NSObject, WKUIDelegate {}

final class MyNavigationDelegate: NSObject, WKNavigationDelegate {}

struct ContentView: View {
    var body: some View {
        WebView()
            .uiDelegate(MyUIDelegate())
            .navigationDelegate(MyNavigationDelegate())
    }
}

文档

最新 (Swift-DocC)

安装

WebUI 可通过 Swift Package Manager 获得。

Xcode

  1. File > Add Package Dependencies…
  2. 搜索 https://github.com/cybozu/WebUI.git
  3. 添加软件包并将 WebUI 链接到您的应用程序目标。

CLI

  1. 创建描述依赖项的 Package.swift

    // swift-tools-version: 6.0
    import PackageDescription
    
    let package = Package(
        name: "SomeProduct",
        products: [
            .library(name: "SomeProduct", targets: ["SomeProduct"])
        ],
        dependencies: [
            .package(url: "https://github.com/cybozu/WebUI.git", exact: "3.0.0")
        ],
        targets: [
            .target(
                name: "SomeProduct",
                dependencies: [
                    .product(name: "WebUI", package: "WebUI")
                ]
            )
        ]
    )
  2. 在终端中运行以下命令。

    $ swift package resolve

隐私清单

此库不收集或跟踪用户信息,因此不包含 PrivacyInfo.xcprivacy 文件。

演示

此仓库包含 iOS 和 macOS 的演示应用程序。

打开 Examples/Examples.xcodeproj 并运行它。