Vai alla navigazione principale

Iniziare

GitHub

Puoi utilizzare la nostra configurazione assistita dall'IA per installare il plugin. Aggiungi le Capgo abilità al tuo strumento di IA utilizzando il seguente comando:

Finestra del terminale
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-plugins

Usa poi la seguente richiesta:

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:

Finestra del terminale
npm install @capgo/capacitor-webview-crash
npx cap sync
import { WebViewCrash } from '@capgo/capacitor-webview-crash';

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);
}

Impostare le opzioni di rilancio in capacitor.config.ts così la decisione rimane in native 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;

Usare restartIntervalMs per applicazioni sempre attive dove gli utenti possono tenere lo stesso WebView aperto per giorni: restartCron schermi kiosk, dashboard delle sale di controllo, scanner di magazzino, terminali POS, tablet di flotta e segnali digitali. Usare 0 3 * * * per rilanci orari come reason: 'periodicRestart', then Android recreates the host activity and iOS rebuilds the Capacitor bridge view so a new WKWebView , poi Android ricrea l'attività host e iOS ricostruisce il ponte di visualizzazione code nativo così un nuovo

Scegli un intervallo o un orario di pianificazione che il tuo prodotto può tollerare. restartCron supporta *, liste, 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 0Un riavvio 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.

Chiamare restartWebView() quando il runtime JavaScript corrente decide che il WebView nativo debba essere sostituito proattivamente, ad esempio dopo un flusso di lavoro pesante in memoria o prima di entrare in una lunga sessione non assistita:

await WebViewCrash.restartWebView();

Il metodo scrive un marker pendente con reason: 'manualRestart'risolve la chiamata corrente, quindi chiede al nativo code di creare una nuova vista WebView. L'Android ricrea l'attività host. L'iOS ricostruisce il ponte di visualizzazione Capacitor per creare una nuova WKWebView è creata al posto di ricaricare la pagina corrente.

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);
}

Elimina il marker memorizzato dopo che il tuo trattamento di recupero è completato.

await WebViewCrash.clearPendingCrashInfo();

Creato un marker di crash falso 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);

Memorizza un marker di riavvio manuale e chiede al nativo code di creare un WebView fresco.

await WebViewCrash.restartWebView();
  • L'Android memorizza i metadati di crash da onRenderProcessGone, inclusi didCrash e rendererPriorityAtExit quando la piattaforma li fornisce.
  • L'iOS memorizza i metadati di crash da webViewWebContentProcessDidTerminate e aggiunge lo stato dell'applicazione corrente quando disponibile.
  • Riavvii manuali e programmati creano una WebView fresca. L'Android ricrea l'attività host; l'iOS ricostruisce la vista del ponte Capacitor.
  • Riavvii programmati utilizzano reason: 'periodicRestart'; i riavvii manuali utilizzano reason: 'manualRestart'.
  • La web non rileva i crash del renderer reale. L'implementazione web simula solo il comportamento con lo storage locale.
export interface PendingCrashInfoResult {
/**
* Stored crash or restart metadata, or `null` when no marker is pending.
*/
value: WebViewCrashInfo | null;
}
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;
}
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;
}
export type WebViewCrashPlatform = 'android' | 'ios' | 'web';
export type WebViewCrashReason =
| 'renderProcessGone'
| 'webContentProcessDidTerminate'
| 'periodicRestart'
| 'manualRestart'
| 'simulated';
export type WebViewCrashAppState = 'active' | 'inactive' | 'background' | 'unknown';

Questa pagina è generata dal plugin’s src/definitions.tsRiepilogare la sincronizzazione quando il pubblico API cambia in modo upstream.

Continua da Iniziare

Se stai utilizzando

Avviare per pianificare il comportamento di media e interfaccia nativa, connettilo con Utilizzare @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-webview-crash per la capacità nativa in Utilizzare @capgo/capacitor-webview-crash, Utilizzare @capgo/capacitor-live-activities per la capacità nativa in Utilizzare @capgo/capacitor-live-activities, @capgo/capacitor-live-activities per il dettaglio di implementazione in @capgo/capacitor-live-activities, Utilizzare @capgo/capacitor-video-player per la capacità nativa in Utilizzare @capgo/capacitor-video-player, e Se stai utilizzando Getting Started per pianificare il comportamento di media e interfaccia nativa, connettilo con Utilizzare @capgo/capacitor-webview-crash per la capacità nativa in Utilizzare @capgo/capacitor-webview-crash, Utilizzare @capgo/capacitor-live-activities per la capacità nativa in Utilizzare @capgo/capacitor-live-activities, @capgo/capacitor-live-activities per il dettaglio di implementazione in @capgo/capacitor-live-activities, Utilizzare @capgo/capacitor-video-player per la capacità nativa in Utilizzare @capgo/capacitor-video-player, e @capgo/capacitor-video-player per i dettagli di implementazione in @capgo/capacitor-video-player.