Saltare al contenuto

Inizia

GitHub

Puoi utilizzare la nostra configurazione assistita da AI per installare il plugin. Aggiungi le Capgo competenze al tuo strumento AI utilizzando il seguente comando:

Fermata di comando
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-plugins

Poi 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 la configurazione manuale, installa il plugin eseguendo i seguenti comandi e segui le istruzioni specifiche per la piattaforma riportate di seguito:

Fermata di comando
npm install @capgo/capacitor-webview-crash
npx cap sync
import { WebViewCrash } from '@capgo/capacitor-webview-crash';

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

Imposta le opzioni di ripristino in capacitor.config.ts in modo che la decisione rimanga in code nativo 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;

Usa restartIntervalMs per applicazioni sempre attive in cui gli utenti possono tenere lo stesso WebView aperto per giorni: schermate di kiosk, dashboard di controllo, scanner di magazzino, terminali POS, tablet di flotta e segnalazioni digitali. Usa restartCron per riavvii orari come 0 3 * * * per un riavvio quotidiano alle 03:00 nella zona oraria locale del dispositivo. I riavvi programmati scrivono un marker di attesa con reason: 'periodicRestart'poi Android ricrea l'attività host e iOS ricostruisce il ponte di visualizzazione Capacitor per creare un nuovo WKWebView creato da code nativo.

Scegli un intervallo o un orario cron 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 persisti gli eventi in coda, lo stato dei form non salvati e lo stato di navigazione corrente prima di utilizzare gli orari aggressivi.

Chiamata restartWebView() contexto: Appflow Migration Step2. Pagina/Area: Appflow comparison / migrazione marketing. Ruolo: Copia del sito web. Visualizzato in: pagina ionic-appflow.astro. Preservare i termini di prodotto/marca e sviluppatore di Capgo esattamente.

await WebViewCrash.restartWebView();

Copiare nel portapannetto 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 risolve la chiamata corrente, poi chiede al nativo __CAPGO_KEEP_0__ di creare un WebView fresco. L'Android ricrea l'attività host. L'iOS ricostruisce il ponte di visualizzazione __CAPGO_KEEP_1__ per creare un nuovo

API overview

Panoramica di API

Sezione intitolata “getPendingCrashInfo” null quando non c'è nulla in sospeso.

const pending = await WebViewCrash.getPendingCrashInfo();
if (pending.value) {
console.log(pending.value.platform, pending.value.reason);
}

Pulisce il marker memorizzato dopo che il tuo trattamento di recupero è finito.

await WebViewCrash.clearPendingCrashInfo();

Crea un marker di crash falso in modo che QA e il debug locale possano 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();

Nota del sistema

Nota del sistema
  • L'Android memorizza i metadati di crash da onRenderProcessGone, inclusi didCrash e rendererPriorityAtExit quando il sistema fornisce tali informazioni.
  • L'iOS memorizza i metadati di crash da webViewWebContentProcessDidTerminate e aggiunge lo stato dell'applicazione corrente quando disponibile.
  • I riavvii manuali e programmati creano una nuova vista Web. L'Android ricrea l'attività host; l'iOS ricostruisce la vista del ponte Capacitor.
  • I 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.ts. Riavvia la sincronizzazione quando le informazioni pubbliche API cambiano in modo upstream.

Se stai utilizzando Iniziare per pianificare il comportamento dei media nativi e dell'interfaccia, connettilo con Utilizza @capgo/capacitor-webview-crash per la capacità nativa in Utilizza @capgo/capacitor-webview-crash, Utilizzando @capgo/capacitor-live-attività per la capacità nativa in Utilizzando @capgo/capacitor-live-attività @capgo/capacitor-live-attività per il dettaglio di implementazione in @capgo/capacitor-live-attività Utilizzando @capgo/capacitor-player-video per la capacità nativa in Utilizzando @capgo/capacitor-player-video, e @capgo/capacitor-player-video per il dettaglio di implementazione in @capgo/capacitor-player-video