メインコンテンツへスキップ
@capgo/capacitor-webview-crash 認証とセキュリティ オープンソース

WebViewのクラッシュ Capacitor プラグイン

クラッシュした WebView をネイティブで再起動し、長時間実行中の WebView を一定間隔でリサイクルします

インストール

bun add @capgo/capacitor-webview-crash bunx cap sync
npm、pnpm、または yarn
  • npm install @capgo/capacitor-webview-crash
  • pnpm add @capgo/capacitor-webview-crash
  • yarn add @capgo/capacitor-webview-crash

ガイド

Capacitor で WebView Crash を使用する方法

実機でテストする

Capgo アプリをダウンロードして、QR code をスキャンしてください。

WebView Crash プラグインのプレビュー QR code

@capgo/capacitor-webview-crash を使用

WebView のクラッシュ復旧を検出し、停止した WebView をネイティブに再起動。メモリプレッシャーが OOM になる前に、長時間稼働する WebView を一定間隔でリサイクルします。

インストール

npm install @capgo/capacitor-webview-crash
npx cap sync

このプラグインで利用可能な機能

  • iOS/Android での WebView クラッシュ後のネイティブ再起動。
  • 数日間稼働するキオスク、POS、サイネージ、スキャナー、ダッシュボードアプリ向けの、一定間隔でのネイティブ WebView 再起動。
  • restartWebView - ページのリロードなしで、JavaScript から新しいネイティブ WebView をリクエストできます。
  • WebViewCrashPluginConfig - 型 plugins.WebViewCrash におけるオプション capacitor.config.ts.
  • getPendingCrashInfo - 保存されているネイティブのクラッシュまたは再起動マーカーを返します。または、 null 保留中のものがない場合。
  • clearPendingCrashInfo - アプリが状態を復元した後、保存されているマーカーをクリアします。
  • simulateCrashRecovery - リカバリフローをローカルでテストするために、擬似的なクラッシュマーカーを作成します。
  • webViewRestoredAfterCrash - 復旧したランタイムでクラッシュマーカーがまだ保留中の場合に発行されるリスナーイベント。
  • webViewRestoredAfterRestart - ネイティブの再起動マーカーがまだ保留中の場合に発行されるリスナーイベント。

使用例

import { WebViewCrash } from '@capgo/capacitor-webview-crash';

await WebViewCrash.addListener('webViewRestoredAfterCrash', async (info) => {
  console.log('Recovered after a WebView crash', info);
  await WebViewCrash.clearPendingCrashInfo();
});

await WebViewCrash.addListener('webViewRestoredAfterRestart', async (info) => {
  console.log('Recovered after a native WebView restart', info);
  await WebViewCrash.clearPendingCrashInfo();
});

const pending = await WebViewCrash.getPendingCrashInfo();
// Note: the listener callback may have already cleared the pending marker.
if (pending.value) {
  console.log('Pending crash or restart marker', pending.value);
}

Nativeの自動再起動

の再起動動作を設定します。 capacitor.config.ts JavaScriptが利用できない場合でも動作を継続できるようにします。

import type { CapacitorConfig } from '@capacitor/cli';
import type { WebViewCrashPluginConfig } from '@capgo/capacitor-webview-crash';

const webViewCrash: WebViewCrashPluginConfig = {
  restartOnCrash: true,
  restartCron: '0 3 * * *',
  restartAfterCrashDelayMs: 0,
};

const config: CapacitorConfig = {
  plugins: {
    WebViewCrash: webViewCrash,
  },
};

export default config;

スケジュールされた再起動の設定は、 reason: 'periodicRestart'. 入力が不正な場合は、 restartIntervalMs 一定の間隔、または restartCron デバイスのローカルタイムゾーンに基づいた5フィールドのcron形式で指定できます。例: 0 3 * * * 毎日03:00に再起動するように設定します。両方のスケジュールを同時に設定しないでください。同時に設定すると、ネイティブの初期化時に致命的な設定エラーが発生します。 restartCron が設定されており、 restartIntervalMs より大きい場合、 0ネイティブの初期化時に致命的な設定エラーが発生します。短い間隔を設定する場合は、事前にアプリの重要な状態を保存してください。

Nativeの手動再起動

呼び出す restartWebView() メモリ負荷の高いワークフローの後など、JavaScript側でネイティブWebViewをプロアクティブに置き換える必要がある場合:

await WebViewCrash.restartWebView();

このメソッドは、以下を書き込みます reason: 'manualRestart' そして、ネイティブの code に新しい WebView の作成を要求します。Android ではホスト Activity が再生成され、iOS では Capacitor ブリッジビューが再構築されるため、新しい WKWebView WebView が作成されます(現在のページをリロードするのではなく)。

リファレンス全文

@capgo/capacitor-webview-crashの使用から続ける

使用している場合 @capgo/capacitor-webview-crash を使用 ネイティブメディアとインターフェースの挙動を計画するには、次と連携させてください @capgo/capacitor-webview-crash @capgo/capacitor-webview-crash における実装の詳細についてはこちらをご確認ください。 スタートガイド スタートガイドの実装詳細については、 @capgo/capacitor-live-activities の使用 @capgo/capacitor-live-activities の使用におけるネイティブ機能については、 @capgo/capacitor-live-activities @capgo/capacitor-live-activities の実装の詳細については、 @capgo/capacitor-video-playerの使用方法 「@capgo/capacitor-video-player. の使い方」のネイティブ機能については

よくある質問

WebView CrashプラグインのFAQ

CapacitorアプリにWebView Crashプラグインをインストールするには?

"bun add @capgo/capacitor-webview-crash"(または"npm install @capgo/capacitor-webview-crash")を実行し、続けて"bunx cap sync"を実行すると、iOSとAndroidのプロジェクトにネイティブのcodeが反映されます。あとはアプリのcodeで"@capgo/capacitor-webview-crash"からインポートしてください。

@capgo/capacitor-webview-crashはReact、Vue、Angularで動作しますか?

はい。WebView CrashはCapacitorパッケージなので、Ionic、React、Vue、Angular、Svelte、素のJavaScriptなど、Capacitor上で動くあらゆるWebフレームワークで動作します。

@capgo/capacitor-webview-crash はどの Capacitor バージョンに対応していますか?

Capgo プラグインは Capacitor のメジャーバージョンに合わせています。使用している Capacitor のメジャーバージョンに一致するプラグインのメジャーバージョンを使ってください (例: Capacitor 8 ならプラグイン v8)。GitHub の README にある互換性テーブルに、メンテナンス中のバージョンが記載されています。

@capgo/capacitor-webview-crash は無料のオープンソースですか?

はい。code のソースコードは GitHub の https://github.com/Cap-go/capacitor-webview-crash/ で公開されており、npm から無料でインストールできます。バグ報告やプルリクエストもお待ちしています。

App Store の審査なしで、WebView Crash を使用している code をアップデートできますか?

プラグインのインストールやアップグレードはネイティブの code を変更するため、新しいストアビルドが必要です。その後は、プラグインを呼び出す JavaScript、HTML、CSS の変更を Capgo Live Updates で即座に配信できます。

アプリの審査を待たずに WebView Crash の修正をリリース

プラグインをストア用ビルドに組み込めば、Capgo live updates で JavaScript、HTML、CSS の変更を数分でユーザーに配信できます

Capgo から始める