@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 が作成されます(現在のページをリロードするのではなく)。
リファレンス全文
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- ドキュメント: /docs/plugins/webview-crash/
@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. の使い方」のネイティブ機能については