mcpField
W
webkit-integration

webkit-integration

github.com/rshankras開発83876 回インストール14 週間前に更新
リポジトリ

webkit-integration について

アプリにウェブコンテンツを埋め込む SwiftUI/WebKit 開発者向けのスキルです。WebView と WebPage の設定、ナビゲーション、JavaScript 連携、カスタマイズ、ページ内容の書き出しを扱います。

主な機能

  1. 01URL、HTML、データを読み込み
  2. 02WebPage でナビゲーションを制御
  3. 03引数を使って JavaScript を実行
  4. 04ナビゲーションとカスタムスキームを処理
  5. 05スナップショットを取得し PDF を書き出し
  6. 06Web ビューの操作性を設定

活用シーン

  1. 01SwiftUI 画面にウェブページを埋め込む
  2. 02戻る、進む、再読み込みを追加
  3. 03ページ読み込み後に JavaScript を呼び出す
  4. 04埋め込みコンテンツを PDF に書き出す

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rshankras/claude-code-apple-skills --skill webkit-integration

インストール後、Claude Code で/webkit-integrationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

javascript-advanced.md
navigation.md
webview-basics.md

詳細

SwiftUI 向け WebKit 統合

ネイティブの WebView 構造体と監視可能な WebPage クラスを使用して、SwiftUI アプリに Web コンテンツを埋め込み、制御します。読み込み、ナビゲーション、JavaScript の実行、ビューのカスタマイズについて説明します。

このスキルが有効になる条件

  • SwiftUI アプリ内に Web コンテンツを表示したい
  • Web ビューで URL、HTML 文字列、またはデータの塊を読み込みたい
  • SwiftUI からの JavaScript 連携について質問している
  • 埋め込まれた Web コンテンツのナビゲーション(戻る、進む、再読み込み)を制御したい
  • Web ビューの動作(ジェスチャ、テキスト選択、リンクのプレビュー)をカスタマイズしたい
  • Web コンテンツのスナップショットを取得したり、PDF を書き出したりしたい
  • ナビゲーションリクエストのインターセプトやカスタム URL スキームについて質問している
  • プライベートブラウズやカスタムユーザーエージェントを設定したい

判断ツリー

What do you need?
|
+-- Display a URL or HTML content
|   +-- Simple, no interaction needed
|   |   +-- WebView(url:) --> see webview-basics.md
|   +-- Need loading state, reload, custom config
|       +-- WebPage + WebView(page) --> see webview-basics.md
|
+-- Navigate programmatically (back, forward, intercept)
|   +-- Back/forward list, navigation events
|   |   +-- see navigation.md
|   +-- Intercept or cancel navigation requests
|       +-- NavigationDeciding protocol --> see navigation.md
|
+-- Execute JavaScript or communicate with web content
|   +-- callJavaScript, arguments, content worlds
|       +-- see javascript-advanced.md
|
+-- Capture snapshots, export PDF, web archive
|   +-- page.snapshot(), page.pdf(), page.webArchiveData()
|       +-- see javascript-advanced.md
|
+-- Handle custom URL schemes
    +-- URLSchemeHandler protocol --> see javascript-advanced.md

API の利用可能状況

API最低 OS バージョンインポート
WebViewiOS 26 / macOS 26SwiftUI + WebKit
WebPageiOS 26 / macOS 26WebKit
WebPage.ConfigurationiOS 26 / macOS 26WebKit
NavigationDecidingiOS 26 / macOS 26WebKit
WKContentWorldiOS 14 / macOS 11WebKit
WKSnapshotConfigurationiOS 11 / macOS 10.13WebKit
WKPDFConfigurationiOS 14 / macOS 11WebKit

クイックスタート

最も簡単な使い方
import SwiftUI
import WebKit

struct BrowserView: View {
    var body: some View {
        WebView(url: URL(string: "https://developer.apple.com")!)
    }
}
WebPage を使った完全な制御
import SwiftUI
import WebKit

struct ControlledBrowserView: View {
    @State private var page = WebPage()

    var body: some View {
        WebView(page)
            .onAppear {
                page.load(URLRequest(url: URL(string: "https://developer.apple.com")!))
            }
    }
}

よくある間違い

間違い問題修正方法
ナビゲーション制御が必要なのに WebView(url:) を使う戻る/進む、再読み込み、イベントにアクセスできませんWebPage と WebView(page) を使います
import SwiftUI と併せて import WebKit を忘れるWebView は SwiftUI にありますが、WebPage には WebKit が必要です必ず両方をインポートします
currentNavigationEvent を監視しない読み込み状態を把握できず、エラーを見落としますonChange(of: page.currentNavigationEvent) を使います
ページの読み込み完了前に callJavaScript を呼び出すDOM の準備ができていないため、スクリプトが失敗します.finished ナビゲーションイベントを待ちます
プライベートブラウズに永続データストアを使うユーザーデータがディスクに保存されますWebsiteDataStore で .nonPersistent() を使います
decidePolicyFor(navigationAction:) の nil 戻り値を処理しないキャンセルすべきナビゲーションが続行されますキャンセルする場合は nil を、許可する場合は NavigationPreferences を返します
引数をバインドせずに JavaScript を渡すインジェクションに対して脆弱になり、デバッグも困難になります名前付きの値には arguments: パラメーターを使います

レビューチェックリスト

  • 単純な表示を超える制御が必要な場合は WebPage を使用している
  • SwiftUI と WebKit の両方をインポートしている
  • 読み込みインジケーターとエラー処理のためにナビゲーションイベントを監視している
  • JavaScript の実行前にページの読み込み完了を待っている
  • プライベートブラウズで .nonPersistent() データストアを使用している
  • ナビゲーションのインターセプトで適切な値を返している(許可する場合は環境設定、キャンセルする場合は nil)
  • JavaScript の引数を文字列補間ではなく arguments: パラメーターで渡している
  • ページの読み込み前にカスタム URL スキームハンドラーを設定に登録している
  • 必要に応じて findNavigator(isPresented:) でページ内検索を有効にしている
  • 適切なジェスチャと操作用のモディファイアを適用している(戻る/進む、拡大縮小、テキスト選択)
  • 必要に応じて、コンテンツの背景をカスタマイズして見た目を統一している

リファレンスファイル

ファイル内容
webview-basics.mdWebView の作成、WebPage のセットアップ、設定、ページ内検索、カスタマイズ用モディファイア
navigation.mdコンテンツの読み込み、戻る/進むリスト、ナビゲーションイベント、NavigationDeciding プロトコル
javascript-advanced.mdJavaScript の実行、コンテンツワールド、スナップショット、PDF の書き出し、カスタム URL スキーム

関連項目

  • Web ビューを取り巻くmacOS のウィンドウ管理については、macos/architecture-patterns/ を参照してください
  • Web ビューを表示するナビゲーションアーキテクチャについては、ios/navigation-patterns/ を参照してください
  • Web コンテンツを取り巻くLiquid Glassデザインについては、design/liquid-glass/ を参照してください

References

コメント