跳转到正文

@capgo/capacitor-webview-crash

原生重启崩溃的 WebView,并按固定间隔回收长时间运行的 WebView

原生重启崩溃的 WebView,并按固定间隔回收长时间运行的 WebView

从这里开始 getPendingCrashInfo() 以及下方列出的其他核心方法。

平台支持备注
iOS是原生
Android是原生
Web 端部分支持查看入门指南
  • Native crash restart - 当渲染进程崩溃时,从 iOS 或 Android 端重启 WebView。
  • Scheduled restart - 使用原生定时器定期回收长时间运行的 WebView, restartIntervalMs 或基于实际时间 restartCron.
  • Manual native restart - 允许 JavaScript 请求一个新的原生 WebView, restartWebView() 而无需重新加载页面。
  • 类型化的 Capacitor 配置 - 提供 WebViewCrashPluginConfig 用于 plugins.WebViewCrash 中的 capacitor.config.ts.
  • getPendingCrashInfo - 返回存储的原生崩溃或重启标记,或者 null 当没有待处理项时。
  • clearPendingCrashInfo - 在应用恢复状态后清除存储的标记。
  • simulateCrashRecovery - 创建一个模拟的崩溃标记,以便在本地测试恢复流程。
  • addListener - 触发 webViewRestoredAfterCrash 用于崩溃标记以及 webViewRestoredAfterRestart 用于任何原生重启标记。
方法描述
getPendingCrashInfo返回已存储的原生崩溃或重启标记,或 null 当没有待处理项时。
clearPendingCrashInfo在应用恢复状态后清除已存储的标记。
simulateCrashRecovery创建一个模拟崩溃标记,以便在本地测试恢复流程。
restartWebView写入 reason: 'manualRestart' 并请求原生 code 创建一个新的 WebView。
addListener触发 webViewRestoredAfterCrash 或 webViewRestoredAfterRestart 当监听器挂载且匹配的标记仍处于待处理状态时。
removeAllListeners移除所有插件监听器。

该插件扩展了 Capacitor 的 PluginsConfig 配置,并新增一个带类型的 WebViewCrash 配置项:

export interface WebViewCrashPluginConfig {
restartOnCrash?: boolean;
restartIntervalMs?: number;
restartCron?: string;
restartAfterCrashDelayMs?: number;
}
  • 该插件会检测 WebView 崩溃后的恢复情况,但无法防止底层崩溃本身。
  • 恢复后的 JavaScript 运行时是全新的,因此当这个 API 触发时,之前 WebView 中的内存状态已经丢失。
  • 定时重启会写入 reason: 'periodicRestart';手动重启会写入 reason: 'manualRestart'。在启用短重启间隔、cron 定时任务或调用之前,请先持久化未保存的状态 restartWebView().
  • restartCron 使用设备本地时区的 5 位 cron 语法,例如 0 3 * * * 用于每日 03:00 重启。请勿同时配置两个调度任务:当 restartCron 被设置且 restartIntervalMs 大于 0.
  • 时,原生初始化会抛出致命配置错误。在 Android 上,可能支持 didCrash 以及 rendererPriorityAtExit 等额外字段。
  • 在 iOS 上,插件会在 appState 观察到已终止的 WebView 进程时进行记录。手动和定时重启会重建 Capacitor bridge view,从而创建一个新的 WKWebView 。

此参考文档同步自 src/definitions.ts 中的 capacitor-webview-crash.

如果你正在使用 @capgo/capacitor-webview-crash 来规划原生媒体和界面行为,并将其与 使用 @capgo/capacitor-webview-crash 用于“使用 @capgo/capacitor-webview-crash”中的原生能力, 使用 @capgo/capacitor-live-activities 用于使用 @capgo/capacitor-live-activities 时的原生能力, @capgo/capacitor-live-activities 在 @capgo/capacitor-live-activities 中的实现细节, 使用 @capgo/capacitor-video-player 有关使用 @capgo/capacitor-video-player 时的原生能力,以及 @capgo/capacitor-video-player 关于 @capgo/capacitor-video-player. 中的实现细节