Iniziare
Copia una promozione di impostazione 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.
Puoi utilizzare la nostra configurazione assistita da AI per installare il plugin. Aggiungi le Capgo abilità al tuo strumento AI utilizzando il seguente comando:
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsUsa poi 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 la configurazione manuale, installa il plugin eseguendo i seguenti comandi e segui le istruzioni specifiche del tuo platform sotto:
npm install @capgo/capacitor-webview-crashnpx cap syncimport { WebViewCrash } from '@capgo/capacitor-webview-crash';Flusso di recupero raccomandato
Sezione intitolata “Flusso di recupero raccomandato”Aggiungi ascoltatori il prima possibile durante l'avvio dell'applicazione affinché 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 auto nativo
Sezione intitolata “Ripristino auto nativo”Imposta le opzioni di ripristino in capacitor.config.ts in modo che la decisione rimanga in code anche quando il runtime JavaScript si è bloccato 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;Usa restartIntervalMs per applicazioni sempre attive in cui gli utenti possono tenere lo stesso WebView aperto per giorni: schermate di kiosk, pannelli di controllo, dashboard di controllo, scanner di magazzino, terminali POS, tablet di flotta e segnali digitali. Usa restartCron per ripristini orologio come 0 3 * * * per un riavvio quotidiano alle 03:00 nel fuso orario locale del dispositivo. I riavvi programmati scrivono un marker di attesa con reason: 'periodicRestart', quindi Android ricrea l'attività host e iOS ricostruisce la vista del ponte Capacitor per creare un nuovo WKWebView viene creato a partire dal code nativo.
Scegli un intervallo o un orario cron che il tuo prodotto possa tollerare. restartCron supporta *, liste, intervalli e passaggi. Non configurare entrambi i programmi di riavvio contemporaneamente: l'inizializzazione nativa lancia un errore di configurazione fatale quando restartCron è impostato e restartIntervalMs è maggiore di 0. Un riavvio crea un runtime JavaScript fresco, quindi persisti gli eventi in coda, lo stato dei form non salvati e lo stato di navigazione corrente prima di utilizzare programmi di riavvio aggressivi.
Riavvio nativo manuale
Sottosezione intitolata “Riavvio nativo manuale”Chiamata restartWebView() When il runtime JavaScript corrente decide che il WebView nativo dovrebbe essere sostituito proattivamente, ad esempio dopo un flusso di lavoro pesante in termini di memoria o prima di entrare in una lunga sessione non assistita:
await WebViewCrash.restartWebView();La funzione scrive un marker pendente con reason: 'manualRestart'risolve la chiamata corrente, poi chiede al nativo code di creare un WebView fresco. L'Android ricrea l'attività host. L'iOS ricostruisce il ponte di visualizzazione Capacitor in modo che venga creato un nuovo WKWebView piuttosto che ricaricare la pagina corrente.
Panoramica di API
Sottosezione intitolata “API panoramica”getPendingCrashInfo
Sottosezione intitolata “getPendingCrashInfo”Restituisce il marker di crash o di riavvio nativo memorizzato, o null quando non c'è nulla in sospeso.
const pending = await WebViewCrash.getPendingCrashInfo();if (pending.value) { console.log(pending.value.platform, pending.value.reason);}clearPendingCrashInfo
Sottosezione intitolata “clearPendingCrashInfo”Elimina il marker memorizzato dopo la gestione della tua ripresa è finita.
await WebViewCrash.clearPendingCrashInfo();simulateCrashRecovery
Sottosezione intitolata “simulateCrashRecovery”Crea un marker di crash falso in modo che i QA e la debug locale possano esercitare la via di ripresa senza far crashare un WebView reale.
const simulated = await WebViewCrash.simulateCrashRecovery();console.log(simulated.value);restartWebView
Sottosezione intitolata “restartWebView”Memorizza un marker di riavvio manuale e chiedi al nativo code di creare un WebView fresco.
await WebViewCrash.restartWebView();Note sulla piattaforma
Sottosezione intitolata “Note sulla piattaforma”- L'Android memorizza i metadati di crash da
onRenderProcessGone, inclusididCrashe quando la piattaforma fornisce loro.rendererPriorityAtExitiOS archivia i metadati degli errori di archiviazione da - e aggiunge lo stato dell'applicazione corrente quando disponibile.
webViewWebContentProcessDidTerminateI riavvii manuali e programmati creano una WebView fresca. L'Android ricrea l'attività host; l'iOS ricostruisce la vista del ponte __CAPGO_KEEP_0__. - Manual and scheduled restarts create a fresh WebView. Android recreates the host activity; iOS rebuilds the Capacitor bridge view.
- ; i riavvii manuali utilizzano
reason: 'periodicRestart'La web non rileva gli errori di rendering reali. L'implementazione web simula solo il comportamento con lo storage locale.reason: 'manualRestart'. - Riferimento al tipo
Sezione intitolata “Riferimento al tipo”
Sezione intitolata “PendingCrashInfoResult”PendingCrashInfoResult
Copia negli appunti export interface PendingCrashInfoResult { /** * Stored crash or restart metadata, or `null` when no marker is pending. */ value: WebViewCrashInfo | null;}WebViewCrashPluginConfig
Sezione intitolata “Configurazione del plugin WebViewCrash”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 “Informazioni su WebViewCrash”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 “Piattaforma di WebViewCrash”export type WebViewCrashPlatform = 'android' | 'ios' | 'web';WebViewCrashReason
Sezione intitolata “Motivo di WebViewCrash”export type WebViewCrashReason = | 'renderProcessGone' | 'webContentProcessDidTerminate' | 'periodicRestart' | 'manualRestart' | 'simulated';WebViewCrashAppState
Sezione intitolata “Stato dell'app di WebViewCrash”export type WebViewCrashAppState = 'active' | 'inactive' | 'background' | 'unknown';Fonte di Verità
Sezione intitolata “Fonte di Verità”Questa pagina è generata dal plugin src/definitions.ts. Riavvia la sincronizzazione quando le informazioni pubbliche API cambiano in fase di sviluppo
Continua da Inizia
Sezione intitolata “Continua da Inizia”Se stai utilizzando Inizia per pianificare il comportamento dei media e dell'interfaccia nativi, connettilo con Utilizza @capgo/capacitor-webview-crash per la capacità nativa in Utilizza @capgo/capacitor-webview-crash Utilizza @capgo/capacitor-live-activities per la capacità nativa in Utilizza @capgo/capacitor-live-activities @capgo/capacitor-live-activities per i dettagli di implementazione in @capgo/capacitor-live-attivitàs Usando @capgo/capacitor-video-player per la capacità nativa in Usando @capgo/capacitor-video-player, e @capgo/capacitor-video-player per i dettagli di implementazione in @capgo/capacitor-video-player.