跳过内容

Getting Started

GitHub

您可以使用我们的 AI 助手设置来安装插件。使用以下命令将 Capgo 技能添加到您的 AI 工具中:

终端窗口
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-plugins

然后使用以下提示:

Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-webview-crash` plugin in my project.

如果您prefer Manual Setup,安装插件,请运行以下命令并遵循以下平台特定的说明:

终端窗口
npm install @capgo/capacitor-webview-crash
npx cap sync
import { WebViewCrash } from '@capgo/capacitor-webview-crash';

尽早在应用启动时附加监听器,以便恢复的运行时可以在用户继续浏览之前反应:

import { WebViewCrash } from '@capgo/capacitor-webview-crash';
await WebViewCrash.addListener('webViewRestoredAfterCrash', async (info) => {
console.log('Recovered after a WebView crash', info);
// Rehydrate critical state, reopen the correct screen, or prompt the user to retry.
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 以便决策仍然在原生 code 中,即使 JavaScript 运行时已崩溃或尚未加载:

import type { CapacitorConfig } from '@capacitor/cli';
import type { WebViewCrashPluginConfig } from '@capgo/capacitor-webview-crash';
const webViewCrash: WebViewCrashPluginConfig = {
// Enabled by default. Keep this on for long-running apps.
restartOnCrash: true,
// Use a 5-field cron schedule in the device local timezone.
// Do not combine restartCron with an active restartIntervalMs.
restartCron: '0 3 * * *',
// Optional delay before restarting after a crash.
restartAfterCrashDelayMs: 0,
};
const config: CapacitorConfig = {
plugins: {
WebViewCrash: webViewCrash,
},
};
export default config;

使用 restartIntervalMs 为那些用户可能在 WebView 中保持打开多天的 always-on 应用:自助屏幕、控制室仪表盘、仓库扫描器、POS 终端、车队平板和数字广告牌。使用 restartCron 为墙钟重启,如 0 3 * * * 为每天 03:00 重启在设备本地时区。预定的重启写入一个待处理标记, reason: 'periodicRestart',然后 Android 重建宿主活动,而 iOS 重建 Capacitor 桥视图,因此创建了一个新的 WKWebView 从本机 code 创建

选择一个间隔或 cron 计划您的产品可以容忍。 restartCron 支持 *,列表、范围和步骤。不要同时配置两个计划:本机初始化会在 restartCron 设置且 restartIntervalMs 大于 0时抛出致命配置错误。重启创建了一个新的 JavaScript 运行时,因此请在使用激进计划之前保存排队事件、未保存的表单状态和当前导航状态。

Call restartWebView() 当当前 JavaScript 运行时决定原生 WebView 应该被替换时,例如在内存密集型工作流程之后或进入长时间无人看管的会话之前:

await WebViewCrash.restartWebView();

该方法写入一个待处理的标记符号, reason: 'manualRestart'解决当前的调用,然后要求原生 code 创建一个新的 WebView。 Android 重建宿主活动。 iOS 重建 Capacitor 桥接视图,因此创建了一个新的 WKWebView 而不是重新加载当前页面。

返回存储的原生崩溃或重启标记,或者 null 当没有待处理的标记时。

const pending = await WebViewCrash.getPendingCrashInfo();
if (pending.value) {
console.log(pending.value.platform, pending.value.reason);
}

在恢复处理完成后清除存储的标记器。

await WebViewCrash.clearPendingCrashInfo();

simulateCrashRecovery

标题:模拟崩溃恢复

为QA和本地调试创建一个假崩溃标记,以便可以在不崩溃真实WebView的情况下演练恢复路径。

const simulated = await WebViewCrash.simulateCrashRecovery();
console.log(simulated.value);

存储一个手动重启标记并要求本机code创建一个新的WebView。

await WebViewCrash.restartWebView();
  • Android应用程序崩溃的元数据来自 onRenderProcessGone包括 didCrashrendererPriorityAtExit 当平台提供时
  • iOS应用程序崩溃的元数据来自 webViewWebContentProcessDidTerminate 并且添加当前应用程序状态(可用时)
  • 手动和计划重启创建一个新的WebView。Android重新创建宿主活动;iOS重建Capacitor桥视图
  • 计划重启使用 reason: 'periodicRestart';手动重启使用 reason: 'manualRestart'.
  • Web不检测真实的渲染器崩溃。Web实现仅模拟本地存储的行为

类型参考

类型参考

PendingCrashInfoResult

待处理崩溃信息结果
export interface PendingCrashInfoResult {
/**
* Stored crash or restart metadata, or `null` when no marker is pending.
*/
value: WebViewCrashInfo | null;
}

WebViewCrashPluginConfig

Web视图崩溃插件配置
export interface WebViewCrashPluginConfig {
/**
* Restart the WebView from native code when the renderer process dies.
*
* @default true
*/
restartOnCrash?: boolean;
/**
* Fixed native interval, in milliseconds, for proactively replacing long-running WebViews.
*
* Set to `0` to disable interval restarts. Do not combine an active interval
* with `restartCron`; native initialization fails fast when both schedules are configured.
*
* @default 0
*/
restartIntervalMs?: number;
/**
* Cron schedule for proactively replacing long-running WebViews.
*
* Uses standard 5-field cron syntax in the device local timezone:
* `minute hour day-of-month month day-of-week`.
*
* Examples:
* - `0 3 * * *` restarts every day at 03:00.
* - `0,30 * * * *` restarts every 30 minutes.
*
* Do not combine this with an active `restartIntervalMs`; native initialization
* fails fast when both schedules are configured.
*/
restartCron?: string;
/**
* Delay, in milliseconds, before restarting after a crash.
*
* @default 0
*/
restartAfterCrashDelayMs?: number;
}

WebViewCrashInfo

Web视图崩溃信息
export interface WebViewCrashInfo {
/**
* Platform that detected and stored the marker.
*/
platform: WebViewCrashPlatform;
/**
* Unix timestamp in milliseconds for when the marker was written.
*/
timestamp: number;
/**
* ISO-8601 version of `timestamp`.
*/
timestampISO: string;
/**
* Platform-specific reason for the crash or restart marker.
*/
reason: WebViewCrashReason;
/**
* Last known WebView URL when the marker was written.
*/
url?: string;
/**
* Android-only hint from `RenderProcessGoneDetail.didCrash()`.
*/
didCrash?: boolean;
/**
* Android-only renderer priority reported at exit.
*/
rendererPriorityAtExit?: number;
/**
* iOS-only application state captured when the WebView process died.
*/
appState?: WebViewCrashAppState;
}

WebViewCrashPlatform

Web视图崩溃平台
export type WebViewCrashPlatform = 'android' | 'ios' | 'web';

WebViewCrashReason

Web视图崩溃原因
export type WebViewCrashReason =
| 'renderProcessGone'
| 'webContentProcessDidTerminate'
| 'periodicRestart'
| 'manualRestart'
| 'simulated';

WebViewCrashAppState

Web视图崩溃应用状态
export type WebViewCrashAppState = 'active' | 'inactive' | 'background' | 'unknown';

真实来源

真实来源

此页面是由插件生成的 src/definitions.ts当公共API上游发生变化时,请重新同步。

继续从 Getting Started

继续从 Getting Started

如果您正在使用 Getting Started 来规划原生媒体和界面行为,连接它与 使用@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 的实现细节