Richtlinie
Tutorial zum WebView-Crash
Mit @capgo/capacitor-webview-crash
Detektieren Sie wiederhergestellte WebView-Crashes, starten Sie tote WebViews nativ neu und recyclen Sie lange laufende WebViews auf einem festen Intervall, bevor sich die Speicherdurchsatz in einen OOM verwandelt.
Installieren
npm install @capgo/capacitor-webview-crash
npx cap sync
Was diese Plugin-Exposen enthält
- Natives Neustart nach WebView-Crashes auf iOS und Android.
- Festintervalliges natives WebView-Neustart für Kiosk-, POS-, Signage-, Scanner- und Dashboard-Anwendungen, die Tage laufen.
restartWebView- Lassen Sie JavaScript einen frischen nativen WebView ohne Seitenaufruf anfordern.WebViewCrashPluginConfig- Typenplugins.WebViewCrashOptionen incapacitor.config.ts.getPendingCrashInfo- Gibt das gespeicherte native Crash- oder Neustart-Marker zurück, odernullWhen nichts ist anstehend.clearPendingCrashInfo- Löschet den gespeicherten Marker nachdem sich Ihre App ihren Zustand wiederhergestellt hat.simulateCrashRecovery- Erstellt einen fiktiven Crash-Marker, um Recovery-Flows lokal testen zu können.webViewRestoredAfterCrash- Listener-Event wird ausgelöst, wenn ein Crash-Marker noch anstehend ist in der wiederhergestellten Runtime.webViewRestoredAfterRestart- Listener-Event wird ausgelöst, wenn ein Native Restart-Marker noch anstehend ist.
Beispiel zur Verwendung
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);
}
Native Auto Restart
Konfigurieren Sie das Wiederherstellungsverhalten 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 Wiederstarts schreiben reason: 'periodicRestart'. Verwenden Sie restartIntervalMs zurückgesetzt für festgelegte Intervalle oder restartCron für ein 5-Felder-Cron-Schema in der Gerätezeitzone, wie zum Beispiel 0 3 * * * für einen täglichen Neustart um 03:00 Uhr. Konfigurieren Sie beide Schemas nicht gleichzeitig: Die native Initialisierung wirft einen fatalen Konfigurationsfehler, wenn restartCron festgelegt ist und restartIntervalMs größer als 0ist. Persistieren Sie kritische Anwendungsdaten, bevor Sie kurze Schemas verwenden.
Manueller Native Neustart
Aufrufen Sie restartWebView() wenn JavaScript entscheidet, dass die native WebView vorab ersetzt werden soll, zum Beispiel nach einem memory-intensiven Workflow:
await WebViewCrash.restartWebView();
Die Methode schreibt reason: 'manualRestart' und fragt native code an, ein frisches WebView zu erstellen. Android reaktualisiert die Hostaktivität. iOS rekonstruiert die Capacitor Bridgeansicht, sodass stattdessen ein neues WKWebView erzeugt wird, anstatt die aktuelle Seite neu zu laden.
Vollständige Referenz
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- Dokumentation: /docs/plugins/webview-crash/
Weitermachen von Using @capgo/capacitor-webview-crash
Wenn Sie Using verwenden Using @capgo/capacitor-webview-crash um native Medien und Schnittstellenverhalten zu planen, verbinden Sie es mit @capgo/capacitor-webview-crash für die Implementierungsdetails in @capgo/capacitor-webview-crash, Einstieg für die Implementierungsdetails in Einstieg, Using @capgo/capacitor-live-activities für die native Fähigkeit in Using @capgo/capacitor-live-aktivitäten @capgo/capacitor-live-aktivitäten für die Implementierungsdetail in @capgo/capacitor-live-aktivitäten, und Using @capgo/capacitor-video-player für die native Fähigkeit in Using @capgo/capacitor-video-player.