跳过主要内容
返回插件
@capgo/capacitor-webview-crash
教程
@capgo/capacitor-webview-crash

WebView Crash

原生重启崩溃的WebViews,并在固定间隔内回收长时间运行的WebViews

指南

WebView Crash教程

使用@capgo/capacitor-webview-crash

检测恢复的WebView崩溃,原生重启死WebView,定期重启长时间运行的WebView以避免内存压力转化为OOM。

安装

npm install @capgo/capacitor-webview-crash
npx cap sync

此插件暴露的内容

  • 原生重启WebView崩溃(iOS和Android)
  • 为长时间运行的kiosk、POS、显示器、扫描器和仪表板应用提供定期原生WebView重启功能
  • restartWebView - 允许JavaScript请求一个新的原生WebView而不进行页面重载
  • WebViewCrashPluginConfig - 类型 plugins.WebViewCrash 选项 capacitor.config.ts.
  • getPendingCrashInfo - 返回存储的本机崩溃或重启标记,或者 null 当没有待处理的标记时。
  • clearPendingCrashInfo - 在应用程序恢复其状态后清除存储的标记。
  • simulateCrashRecovery - 创建一个虚拟崩溃标记,以便在本地测试恢复流程。
  • webViewRestoredAfterCrash - 当恢复运行时仍有崩溃标记待处理时触发的监听事件。
  • webViewRestoredAfterRestart - 当本机重启标记仍待处理时触发的监听事件。

示例用法

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

本机自动重启

capacitor.config.ts 以便在 JavaScript unavailable 时保持工作:

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;

预定重启写 reason: 'periodicRestart'. 使用 restartIntervalMs 用于固定的时间间隔或 restartCron 用于设备本地时区中的 5 个字段 cron 计划,例如 0 3 * * * 用于每日 03:00 重启。 不要同时配置两个计划:native 初始化会在 restartCron 设置且 restartIntervalMs 大于 0时抛出致命配置错误。 在使用短时间间隔之前,请务必在应用中持久化关键状态。

手动原生重启

调用 restartWebView() 当 JavaScript 决定原生 WebView 应该被替换时,例如在内存密集型工作流后:

await WebViewCrash.restartWebView();

该方法写入 reason: 'manualRestart' 并要求原生 code 创建一个新的 WebView。 Android 重建宿主活动。 iOS 重建 Capacitor 桥视图,使得一个新的 WKWebView is created instead of reloading the current page.

全局参考

继续使用@capgo/capacitor-webview-crash

如果您正在使用 使用@capgo/capacitor-webview-crash 来规划原生媒体和界面行为,连接它与 @capgo/capacitor-webview-crash 了解@capgo/capacitor-webview-crash的实现细节 入门指南 for the implementation detail in Getting Started, 使用@capgo/capacitor-live-activities for the native capability in 使用@capgo/capacitor-live-activities, @capgo/capacitor-live-activities for the implementation detail in @capgo/capacitor-live-activities, 和 使用@capgo/capacitor-video-player for the native capability in 使用@capgo/capacitor-video-player.