Anleitung
WebView Crash in Capacitor nutzen
@capgo/capacitor-webview-crash verwenden
Erkenne wiederhergestellte WebView-Crashes, starte abgestürzte WebViews nativ neu und recycelt lang laufende WebViews in festen Intervallen, bevor Memory Pressure zu einem OOM führt.
Installieren
npm install @capgo/capacitor-webview-crash
npx cap sync
Was dieses Plugin bereitstellt
- Nativer Neustart nach WebView-Crashes auf iOS und Android.
- Nativer WebView-Neustart in festen Intervallen für Kiosk-, POS-, Signage-, Scanner- und Dashboard-Apps, die über Tage laufen.
restartWebView- Ermöglicht JavaScript die Anforderung einer frischen nativen WebView ohne Page Reload.WebViewCrashPluginConfig- Typenplugins.WebViewCrashOptionen incapacitor.config.ts.getPendingCrashInfo- Gibt den gespeicherten Native-Crash- oder Neustart-Marker zurück, odernullwenn nichts aussteht.clearPendingCrashInfo- Löscht den gespeicherten Marker, nachdem die App ihren Zustand wiederhergestellt hat.simulateCrashRecovery- Erstellt einen Fake-Crash-Marker, um Recovery-Flows lokal zu testen.webViewRestoredAfterCrash- Listener-Event, das ausgelöst wird, wenn ein Crash-Marker in der wiederhergestellten Runtime noch aussteht.webViewRestoredAfterRestart- Listener-Event, das ausgelöst wird, wenn ein Native-Restart-Marker noch aussteht.
Anwendungsbeispiel
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);
}
Automatischer Native Restart
Konfiguriere das Neustartverhalten in capacitor.config.ts , damit es weiterläuft, wenn JavaScript nicht verfügbar ist:
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;
Geplante Neustarts werden geschrieben reason: 'periodicRestart'. Nutze restartIntervalMs für feste Intervalle oder restartCron für einen 5-Felder-Cron-Zeitplan in der lokalen Zeitzone des Geräts, wie zum Beispiel 0 3 * * * für einen täglichen Neustart um 03:00 Uhr. Konfiguriere nicht beide Zeitpläne gleichzeitig: Die native Initialisierung wirft einen fatalen Konfigurationsfehler, wenn restartCron gesetzt ist und restartIntervalMs größer als ist 0. Speichere kritische App-Zustände, bevor du kurze Intervalle nutzt.
Manueller Native Restart
Rufe restartWebView() wenn JavaScript entscheidet, dass der native WebView proaktiv ersetzt werden sollte, zum Beispiel nach einem speicherintensiven Workflow:
await WebViewCrash.restartWebView();
Die Methode schreibt reason: 'manualRestart' und fordert das native code auf, eine neue WebView zu erstellen. Android erstellt die Host-Activity neu. iOS baut die Capacitor Bridge-View neu auf, damit eine neue WKWebView erstellt wird, anstatt die aktuelle Seite neu zu laden.
Vollständige Referenz
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- Docs: /docs/plugins/webview-crash/
Weiterlesen unter Using @capgo/capacitor-webview-crash
Wenn du es nutzt @capgo/capacitor-webview-crash verwenden , um natives Media- und Interface-Verhalten zu planen, verbinde es mit @capgo/capacitor-webview-crash für die Implementierungsdetails in @capgo/capacitor-webview-crash, Erste Schritte für die Implementierungsdetails in Erste Schritte, @capgo/capacitor-live-activities verwenden für die native Funktion in „@capgo/capacitor-live-activities verwenden“, @capgo/capacitor-live-activities für die Implementierungsdetails in @capgo/capacitor-live-activities und Verwendung von @capgo/capacitor-video-player für die native Funktionalität in „Verwendung von @capgo/capacitor-video-player.“