Menggunakan @capgo/capacitor-webview-crash
Deteksi crash WebView yang pulih, restart WebView yang mati secara native, dan recycle WebView yang berjalan lama secara berkala sebelum memory pressure menyebabkan OOM.
Instal
npm install @capgo/capacitor-webview-crash
npx cap sync
Apa yang Diekspos Plugin Ini
- Native restart setelah WebView crash di iOS dan Android.
- Native WebView restart dengan interval tetap untuk aplikasi kiosk, POS, signage, scanner, dan dashboard yang berjalan berhari-hari.
restartWebView- Memungkinkan JavaScript meminta native WebView baru tanpa perlu reload halaman.WebViewCrashPluginConfig- Tipeplugins.WebViewCrashopsi dicapacitor.config.ts.getPendingCrashInfo- Mengembalikan marker crash native atau restart yang tersimpan, ataunullsaat tidak ada yang tertunda.clearPendingCrashInfo- Menghapus marker yang tersimpan setelah app memulihkan state-nya.simulateCrashRecovery- Membuat fake crash marker agar flow recovery bisa dites secara lokal.webViewRestoredAfterCrash- Event listener yang dipicu saat crash marker masih tertunda di runtime yang dipulihkan.webViewRestoredAfterRestart- Event listener yang dipicu saat ada native restart marker yang masih tertunda.
Contoh Penggunaan
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);
}
Auto Restart Native
Konfigurasi perilaku restart di capacitor.config.ts agar tetap berfungsi saat JavaScript tidak tersedia:
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;
Restart terjadwal ditetapkan reason: 'periodicRestart'. Gunakan restartIntervalMs untuk interval tetap atau restartCron untuk jadwal cron 5-field di zona waktu lokal perangkat, seperti 0 3 * * * untuk restart harian pukul 03:00. Jangan konfigurasi kedua jadwal sekaligus: inisialisasi native akan memicu error konfigurasi fatal saat restartCron diatur dan restartIntervalMs lebih besar dari 0. Simpan state aplikasi yang kritis sebelum menggunakan jadwal pendek.
Restart Native Manual
Panggil restartWebView() ketika JavaScript memutuskan WebView native harus diganti secara proaktif, misalnya setelah workflow yang berat memori:
await WebViewCrash.restartWebView();
Metode ini menulis reason: 'manualRestart' dan meminta code native untuk membuat WebView baru. Android membuat ulang host activity. iOS membangun ulang Capacitor bridge view agar WKWebView dibuat alih-alih memuat ulang halaman saat ini.
Referensi Lengkap
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- Dokumentasi: /docs/plugins/webview-crash/
Lanjutkan dari Menggunakan @capgo/capacitor-webview-crash
Jika Anda menggunakan Menggunakan @capgo/capacitor-webview-crash untuk merencanakan perilaku media dan antarmuka native, hubungkan dengan @capgo/capacitor-webview-crash untuk detail implementasi di @capgo/capacitor-webview-crash, Panduan Memulai untuk detail implementasi di Getting Started, Menggunakan @capgo/capacitor-live-activities untuk kemampuan native di Menggunakan @capgo/capacitor-live-activities, @capgo/capacitor-live-activities untuk detail implementasi di @capgo/capacitor-live-activities, dan Menggunakan @capgo/capacitor-video-player untuk kapabilitas native saat menggunakan @capgo/capacitor-video-player.