ガイド
WebViewのクラッシュに関するチュートリアル
Using @capgo/capacitor-webview-crash
復元されたWebViewクラッシュを検出、死んだWebViewsを再起動し、長時間実行しているWebViewsを一定間隔でリサイクルする前にOOMになる前に
インストール
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- リカバリランタイム内でクラッシュマーカーがまだ pendding である場合に発火するリスナーイベントwebViewRestoredAfterRestart- __CAPGO_KEEP_0__イベントが発生したときに、JavaScriptが利用できない場合に動作を維持するために設定された任意のネイティブ再起動マーカーがまだ保留中である場合に発生します。
例として
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);
}
ネイティブオートリスタート
__CAPGO_KEEP_0__を設定して、JavaScriptが利用できない場合に動作を維持するようにします。 capacitor.config.ts スケジュールされた再起動は
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'デバイスのローカルタイムゾーン内で5つのフィールドのcronスケジュールで restartIntervalMs 例えば、毎日03:00の再起動 restartCron 両方のスケジュールを同時に設定しないでください: __CAPGO_KEEP_0__が設定されている場合と__CAPGO_KEEP_1__が__CAPGO_KEEP_0__より大きい場合、ネイティブの初期化は致命的な構成エラーを投げます。 0 3 * * * Configure restart behavior in __CAPGO_KEEP_0__ so it keeps working when JavaScript is unavailable: __CAPGO_KEEP_1__ restartCron Scheduled restarts write __CAPGO_KEEP_0__ for fixed intervals or __CAPGO_KEEP_1__ for a 5-field cron schedule in the device local timezone, such as __CAPGO_KEEP_2__ for a daily 03:00 restart. Do not configure both schedules at once: native initialization throws a fatal config error when __CAPGO_KEEP_0__ is set and __CAPGO_KEEP_1__ is greater than restartIntervalMs Use __CAPGO_KEEP_0__ for fixed intervals or __CAPGO_KEEP_1__ for a 5-field cron schedule in the device local timezone, such as __CAPGO_KEEP_2__ for a daily 03:00 restart. 0. アプリの重要な状態を短いスケジュールの前に保存してください。
Manual Native Restart
Call restartWebView() JavaScriptがネイティブのWebViewを予防的に置き換えることを決定した場合、たとえばメモリが重いワークフロー後など:
await WebViewCrash.restartWebView();
このメソッドは reason: 'manualRestart' ネイティブのcodeに新しいWebViewを作成するよう要求します。Androidはホストアクティビティを再構築します。iOSはCapacitorブリッジビューを再構築し、代わりに現在のページを再読み込みするのではなく、新しい WKWebView Full Reference
__CAPGO_KEEP_0__:
- https://GitHub.com/Cap-go/__CAPGO_KEEP_1__-webview-crash/ https://github.com/Cap-go/capacitor-webview-crash/
- Using @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-webview-crash
https://capgo.com/Cap-go/capacitor-webview-crash/
あなたが使用している場合 @capgo/capacitor-webview-crashを使用 ネイティブメディアとインターフェイスの動作を計画する場合、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-webview-crashと接続してください。 @capgo/capacitor-webview-crash ネイティブメディアとインターフェイスの動作を計画する場合の実装詳細は@capgo/capacitor-webview-crashにあります。 Getting Started Getting Startedの実装詳細はGetting Startedにあります。 Using @capgo/capacitor-live-activities ネイティブ機能を使用する場合の実装詳細はUsing @capgo/capacitor-live-activitiesにあります。 @capgo/capacitor-live-activities ネイティブ機能を使用する場合の実装詳細は@capgo/capacitor-live-activitiesにあります。 Using @capgo/capacitor-video-player native capability in Using @capgo/capacitor-video-player.