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

WebView Crash

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

指南

WebView Crash教程

在设备上测试

Download the Capgo app, then scan the QR code.

WebView Crash plugin preview QR code

Using @capgo/capacitor-webview-crash

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

安装

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

此插件暴露的内容

  • 原生重启 WebView 崩溃的 iOS 和 Android
  • 周期性原生重启 WebView 的 kiosk、POS、显示器、扫描器和仪表盘应用,应用运行时间长达几天
  • restartWebView - 让 JavaScript 请求一个新的原生 WebView 而不需要重新加载页面
  • WebViewCrashPluginConfig 类型 plugins.WebViewCrash 选项在 capacitor.config.ts.
  • getPendingCrashInfo 返回存储的原生崩溃或重启标记,或 null __CAPGO_KEEP_0__
  • 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() context: Appflow 比较/迁移营销复制页面/区域:Appflow 比较/迁移营销复制。角色:网站复制句子。见于:ionic-appflow.astro 页面。保留 Capgo 产品/品牌和开发者术语完全不变。消息键 `appflow_migration_step2` (Appflow 迁移步骤 2)。

await WebViewCrash.restartWebView();

当 JavaScript 决定原生 WebView 应该被替换时,例如在内存密集型工作流程之后: reason: 'manualRestart' and asks native code to create a fresh WebView. Android recreates the host activity. iOS rebuilds the Capacitor bridge view so a new WKWebView 并要求原生 __CAPGO_KEEP_0__ 创建一个新的 WebView。Android 重建宿主活动。iOS 重建 __CAPGO_KEEP_1__ 桥接视图,因此创建一个新的

而不是重新加载当前页面。

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

如果您正在使用 使用@capgo/capacitor-webview-crash 来规划原生媒体和界面行为,连接它与 @capgo/capacitor-webview-crash 在@capgo/capacitor-webview-crash中实现详细信息 开始 在开始中实现详细信息 使用@capgo/capacitor-live-activities 为native能力在使用@capgo/capacitor-live-activities中 @capgo/capacitor-live-activities 为实现细节在@capgo/capacitor-live-activities中,以及 使用@capgo/capacitor-video-player 为native能力在使用@capgo/capacitor-video-player中