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 Erweiterung offenlegt
- Natives Neustarten nach WebView-Crashes auf iOS und Android.
- Festintervalliges natives Neustarten von WebViews für Kiosk-, POS-, Signage-, Scanner- und Dashboard-Anwendungen, die Tage laufen.
restartWebView- Lassen Sie JavaScript eine frische native WebView anfordern, ohne eine Seite neu zu laden.WebViewCrashPluginConfig- Typenplugins.WebViewCrashOptionen incapacitor.config.ts.getPendingCrashInfo- Gibt den gespeicherten native Crash- oder Neustartmarker zurück, odernullwenn nichts anhängig ist.clearPendingCrashInfo- Löschte den gespeicherten Marker nachdem Ihre App ihren Zustand wiederhergestellt hat.simulateCrashRecovery- Erstellt einen fiktiven Crash-Marker, damit Recovery-Flows lokal getestet werden können.webViewRestoredAfterCrash- Listener-Event wird ausgelöst, wenn ein Crash-Marker noch anhängig ist in der wiederhergestellten Runtime.webViewRestoredAfterRestart- Listener-Event wird ausgelöst, wenn ein native Neustart-Marker noch anhängig ist.
Beispielhafte 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 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 schreiben reason: 'periodicRestart'. Verwenden Sie restartIntervalMs für festgelegte Intervalle oder restartCron für ein 5-Felder-Cron-Schema in der Gerätezeitzone, wie z.B. 0 3 * * * für einen täglichen Neustart um 03:00 Uhr. Konfigurieren Sie nicht beide Schemas gleichzeitig: Die native Initialisierung wirft einen fatalen Konfigurationsfehler, wenn restartCron gesetzt ist und restartIntervalMs größer als 0ist. Speichern Sie kritische Anwendungsdaten vor der Verwendung kurzer Schedules.
Manueller Native Restart
Aufrufen Sie restartWebView() wenn JavaScript entscheidet, dass die native WebView vorzeitig ersetzt werden soll, z.B. nach einem memory-intensiven Workflow:
await WebViewCrash.restartWebView();
Die Methode schreibt reason: 'manualRestart' und fragt native code an, eine frische WebView zu erstellen. Android reaktualisiert die Host Activity. iOS rekonstruiert die Capacitor Bridge View, damit eine neue WKWebView wird stattdessen anstelle einer Neuladung der aktuellen Seite erstellt.
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 Mit @capgo/capacitor-webview-crash 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 Getting Started, Mit @capgo/capacitor-live-aktivitäten für die native Fähigkeit in Mit @capgo/capacitor-live-aktivitäten, @capgo/capacitor-live-aktivitäten für die Implementierungsdetails in @capgo/capacitor-live-aktivitäten und Mit @capgo/capacitor-video-player für die native Fähigkeit in Mit @capgo/capacitor-video-player.