Usando @capgo/capacitor-webview-crash
Detecta crashes de WebView recuperados, reinicia WebViews bloqueados de forma nativa y recicla WebViews de larga ejecución en intervalos fijos antes de que la presión de memoria cause un OOM.
Instalar
npm install @capgo/capacitor-webview-crash
npx cap sync
Lo que expone este plugin
- Reinicio nativo tras crashes de WebView en iOS y Android.
- Reinicio nativo de WebView a intervalos fijos para apps de kiosk, POS, señalización, escáner y dashboards que funcionan durante días.
restartWebView- Permite que JavaScript solicite un nuevo WebView nativo sin recargar la página.WebViewCrashPluginConfig- Tiposplugins.WebViewCrashopciones encapacitor.config.ts.getPendingCrashInfo- Devuelve el marcador de reinicio o crash nativo guardado, onullcuando no hay nada pendiente.clearPendingCrashInfo- Limpia el marcador guardado tras restaurar el estado de la app.simulateCrashRecovery- Crea un marcador de crash falso para probar flujos de recuperación localmente.webViewRestoredAfterCrash- Evento de listener que se dispara si hay un marcador de crash pendiente en el runtime recuperado.webViewRestoredAfterRestart- Evento de listener que se dispara si hay un marcador de reinicio nativo pendiente.
Ejemplo de uso
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);
}
Reinicio automático nativo
Configura el comportamiento de reinicio en capacitor.config.ts para que siga funcionando cuando JavaScript no esté disponible:
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;
Los reinicios programados escriben reason: 'periodicRestart'. Usa restartIntervalMs en intervalos fijos o restartCron mediante un cron de 5 campos en la zona horaria local del dispositivo, como 0 3 * * * para un reinicio diario a las 03:00. No configures ambos esquemas a la vez: la inicialización nativa lanza un error fatal cuando restartCron está configurado y restartIntervalMs es mayor que 0. Persiste el estado crítico de la app antes de usar intervalos cortos.
Reinicio Nativo Manual
Llama a restartWebView() cuando JavaScript decide que el WebView nativo debe reemplazarse proactivamente, por ejemplo tras un flujo de trabajo pesado:
await WebViewCrash.restartWebView();
El método escribe reason: 'manualRestart' y solicita al code nativo que cree un WebView nuevo. Android recrea la actividad host. iOS reconstruye la vista del bridge Capacitor para que un nuevo WKWebView en lugar de recargar la página actual.
Referencia completa
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- Docs: /docs/plugins/webview-crash/
Continuar desde Using @capgo/capacitor-webview-crash
Si estás usando Usando @capgo/capacitor-webview-crash para planificar el comportamiento de los medios nativos y la interfaz, conéctalo con @capgo/capacitor-webview-crash para los detalles de implementación en @capgo/capacitor-webview-crash, Primeros pasos para los detalles de implementación en Primeros pasos, Uso de @capgo/capacitor-live-activities para la capacidad nativa en Uso de @capgo/capacitor-live-activities, @capgo/capacitor-live-activities para el detalle de implementación en @capgo/capacitor-live-activities, y Uso de @capgo/capacitor-video-player para la capacidad nativa en Uso de @capgo/capacitor-video-player.