@capgo/capacitor-webview-crash を使用
ウェブビューのクラッシュを検出して復元し、死んだ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- ローカルでテストするために、リカバリフローのテストに使用できるように、偽のクラッシュマーカーを作成します。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);
}
ネイティブオートリスタート
再起動の動作を 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 の5つのフィールドのcronスケジュールで、デバイスのローカルタイムゾーン内で、たとえば restartCron の毎日03:00の再起動を設定します。両方のスケジュールを同時に設定しないでください:ネイティブの初期化は、 0 3 * * * が設定されている場合と restartCron が0より大きい場合に致命的な構成エラーを投げます。 restartIntervalMs __CAPGO_KEEP_0__ 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 の実装詳細については、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-webview-crash を参照してください。 Using @capgo/capacitor-live-activities for the native capability in Using @capgo/capacitor-live-activities, @capgo/capacitor-live-activities Using @capgo/capacitor-live-activities を使用してネイティブ機能を実装する場合、Using @capgo/capacitor-live-activities、 @capgo/capacitor-video-playerのネイティブ機能のために