Getting Started
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-webview-crash`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/webview-crash/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Installa
Sezione intitolata “Installa”Puoi utilizzare la nostra configurazione assistita dall'IA per installare il plugin. Aggiungi le Capgo competenze al tuo strumento di AI utilizzando il seguente comando:
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsPoi utilizza il seguente prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-webview-crash` plugin in my project.Se preferisci l'installazione manuale, installa il plugin eseguendo i seguenti comandi e segui le istruzioni specifiche per la piattaforma riportate di seguito:
npm install @capgo/capacitor-webview-crashnpx cap syncImporta
Sezione intitolata “Importa”import { WebViewCrash } from '@capgo/capacitor-webview-crash';Flusso di recupero raccomandato
Sezione intitolata “Flusso di recupero raccomandato”Aggiungi gli ascoltatori il prima possibile durante l'avvio dell'applicazione, in modo che il runtime recuperato possa reagire prima che gli utenti continuino a navigare:
import { WebViewCrash } from '@capgo/capacitor-webview-crash';
await WebViewCrash.addListener('webViewRestoredAfterCrash', async (info) => { console.log('Recovered after a WebView crash', info);
// Rehydrate critical state, reopen the correct screen, or prompt the user to retry. 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);}Ripristino automatico nativo
Sezione intitolata “Riavvio auto nativo”Imposta le opzioni di riavvio in capacitor.config.ts in modo che la decisione rimanga in nativo code anche quando il runtime JavaScript è crashato o non è stato caricato ancora:
import type { CapacitorConfig } from '@capacitor/cli';import type { WebViewCrashPluginConfig } from '@capgo/capacitor-webview-crash';
const webViewCrash: WebViewCrashPluginConfig = { // Enabled by default. Keep this on for long-running apps. restartOnCrash: true,
// Use a 5-field cron schedule in the device local timezone. // Do not combine restartCron with an active restartIntervalMs. restartCron: '0 3 * * *',
// Optional delay before restarting after a crash. restartAfterCrashDelayMs: 0,};
const config: CapacitorConfig = { plugins: { WebViewCrash: webViewCrash, },};
export default config;Utilizza restartIntervalMs per applicazioni sempre attive dove gli utenti possono tenere lo stesso WebView aperto per giorni: schermi kiosk, dashboard di controllo, scanner di magazzino, terminali POS, tablet di flotta e segnali digitali. Utilizza restartCron per riavviamenti orari come 0 3 * * * per un riavvio quotidiano alle 03:00 nella zona oraria del dispositivo. I riavvi programmati scrivono un marker di attesa con reason: 'periodicRestart'e poi Android ricrea l'attività host e iOS ricostruisce il ponte di visualizzazione Capacitor nativo, creando così un nuovo WKWebView è creata da nativo code.
Scegli un intervallo o un orario cron che il tuo prodotto possa tollerare. restartCron supporta *elenco, intervalli e passaggi. Non configurare entrambi gli orari contemporaneamente: l'inizializzazione nativa lancia un errore di configurazione fatale quando restartCron è impostato e restartIntervalMs è maggiore di 0Riavviare crea un runtime JavaScript fresco, quindi conserva gli eventi in coda, lo stato dei form non salvati e lo stato di navigazione corrente prima di utilizzare gli orari aggressivi.
Riavvio nativo manuale
Sezione intitolata “Riavvio nativo manuale”Chiamare restartWebView() when the current JavaScript runtime decides the native WebView should be replaced proactively, for example after a memory-heavy workflow or before entering a long unattended session:
await WebViewCrash.restartWebView();Il metodo scrive un marker di attesa con reason: 'manualRestart', resolves the current call, then asks native code to create a fresh WebView. Android recreates the host activity. iOS rebuilds the Capacitor bridge view so a new WKWebView viene creata al suo posto invece di ricaricare la pagina corrente.
Panoramica di API
Sezione intitolata “API overview”getPendingCrashInfo
Sezione intitolata “getPendingCrashInfo”Restituisce il marker di crash o di riavvio nativo memorizzato, o null quando non c'è nulla in attesa.
const pending = await WebViewCrash.getPendingCrashInfo();if (pending.value) { console.log(pending.value.platform, pending.value.reason);}clearPendingCrashInfo
Sezione intitolata “clearPendingCrashInfo”Cancella il marker memorizzato dopo che il tuo trattamento di recupero è terminato.
await WebViewCrash.clearPendingCrashInfo();simulateCrashRecovery
Sezione intitolata “simulateCrashRecovery”Crea un marker di crash fittizio per consentire a QA e debugging locale di esercitare il percorso di recupero senza far crashare un WebView reale.
const simulated = await WebViewCrash.simulateCrashRecovery();console.log(simulated.value);restartWebView
Sezione intitolata “restartWebView”Memorizza un marker di riavvio manuale e chiede al nativo code di creare una nuova WebView.
await WebViewCrash.restartWebView();Note sulla piattaforma
Sezione intitolata “Note sulla piattaforma”- L'Android memorizza i metadati di crash da
onRenderProcessGone, inclusodidCrasherendererPriorityAtExitquando la piattaforma li fornisce. - L'iOS memorizza i metadati di crash da
webViewWebContentProcessDidTerminatee aggiunge lo stato dell'applicazione corrente quando disponibile. - I riavvii manuali e programmati creano una nuova WebView. L'Android ricrea l'attività host; l'iOS ricostruisce il ponte di visualizzazione Capacitor.
- Riavvii programmati utilizzano
reason: 'periodicRestart'Riavvii manuali utilizzanoreason: 'manualRestart'. - Il web non rileva crash del renderer reali. L'implementazione web simula solo il comportamento con lo storage locale.
Riferimento al tipo
Sezione intitolata “Riferimento al tipo”PendingCrashInfoResult
Sezione intitolata “PendingCrashInfoResult”export interface PendingCrashInfoResult { /** * Stored crash or restart metadata, or `null` when no marker is pending. */ value: WebViewCrashInfo | null;}WebViewCrashPluginConfig
Sezione intitolata “WebViewCrashPluginConfig”export interface WebViewCrashPluginConfig { /** * Restart the WebView from native code when the renderer process dies. * * @default true */ restartOnCrash?: boolean;
/** * Fixed native interval, in milliseconds, for proactively replacing long-running WebViews. * * Set to `0` to disable interval restarts. Do not combine an active interval * with `restartCron`; native initialization fails fast when both schedules are configured. * * @default 0 */ restartIntervalMs?: number;
/** * Cron schedule for proactively replacing long-running WebViews. * * Uses standard 5-field cron syntax in the device local timezone: * `minute hour day-of-month month day-of-week`. * * Examples: * - `0 3 * * *` restarts every day at 03:00. * - `0,30 * * * *` restarts every 30 minutes. * * Do not combine this with an active `restartIntervalMs`; native initialization * fails fast when both schedules are configured. */ restartCron?: string;
/** * Delay, in milliseconds, before restarting after a crash. * * @default 0 */ restartAfterCrashDelayMs?: number;}WebViewCrashInfo
Sezione intitolata “WebViewCrashInfo”export interface WebViewCrashInfo { /** * Platform that detected and stored the marker. */ platform: WebViewCrashPlatform;
/** * Unix timestamp in milliseconds for when the marker was written. */ timestamp: number;
/** * ISO-8601 version of `timestamp`. */ timestampISO: string;
/** * Platform-specific reason for the crash or restart marker. */ reason: WebViewCrashReason;
/** * Last known WebView URL when the marker was written. */ url?: string;
/** * Android-only hint from `RenderProcessGoneDetail.didCrash()`. */ didCrash?: boolean;
/** * Android-only renderer priority reported at exit. */ rendererPriorityAtExit?: number;
/** * iOS-only application state captured when the WebView process died. */ appState?: WebViewCrashAppState;}WebViewCrashPlatform
Sezione intitolata “WebViewCrashPlatform”export type WebViewCrashPlatform = 'android' | 'ios' | 'web';WebViewCrashReason
Sezione intitolata “WebViewCrashReason”export type WebViewCrashReason = | 'renderProcessGone' | 'webContentProcessDidTerminate' | 'periodicRestart' | 'manualRestart' | 'simulated';WebViewCrashAppState
Sezione intitolata “WebViewCrashAppState”export type WebViewCrashAppState = 'active' | 'inactive' | 'background' | 'unknown';Fonte di Verità
Sezione intitolata “Fonte di Verità”Questa pagina è generata dal plugin’s src/definitions.tsRiepilogo quando le informazioni pubbliche API cambiano in modo upstream.
Continua da Getting Started
Sezione intitolata “Continua da Getting Started”Se stai utilizzando Avvio rapido per pianificare il comportamento dei media e dell'interfaccia nativa, connettilo con Utilizzare @capgo/capacitor-webview-crash per la capacità nativa in Utilizzare @capgo/capacitor-webview-crash, Utilizzare @capgo/capacitor-live-attività per la capacità nativa in Utilizzare @capgo/capacitor-live-attività, @capgo/capacitor-live-attività per il dettaglio di implementazione in @capgo/capacitor-live-attività, Utilizzare @capgo/capacitor-player di video per la capacità nativa in Utilizzare @capgo/capacitor-player di video, e @capgo/capacitor-player di video per il dettaglio di implementazione in @capgo/capacitor-player di video.