Zum Hauptinhalt springen
Zurück zu Plugins
@capgo/capacitor-webview-crash
Anleitung
@capgo/capacitor-webview-crash

WebView-Crash

Neustart der auf nativer Ebene gestoppten WebViews und Recycling von WebViews, die länger als ein bestimmter Zeitraum laufen

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 - Typen plugins.WebViewCrash Optionen in capacitor.config.ts.
  • getPendingCrashInfo - Gibt den gespeicherten native Crash- oder Neustartmarker zurück, oder null wenn 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

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.