指南
WebView Crash 教程
使用 @capgo/capacitor-webview-crash
检测恢复的 WebView 崩溃,原生重启死 WebView,并在内存压力转变为 OOM 之前定期回收长时间运行的 WebView。
安装
npm install @capgo/capacitor-webview-crash
npx cap sync
此插件暴露的内容
- iOS 和 Android 上的 WebView 崩溃后进行原生重启。
- 在 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 重启。不要同时配置两个调度:当 restartCron 设置且 restartIntervalMs 大于 0时,原生初始化会抛出致命配置错误。
在使用短调度之前,持久化关键应用状态。
当 JavaScript 决定 native WebView 应该被主动替换时,例如在内存密集型工作流程之后: restartWebView() 该方法写入并要求 native __CAPGO_KEEP_0__ 创建一个新的 WebView。Android 重建了宿主活动。iOS 重建了 __CAPGO_KEEP_1__ 桥视图,因此创建了一个新的页面,而不是重新加载当前页面。
await WebViewCrash.restartWebView();
完整参考 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 https://__CAPGO_KEEP_0__.com/Cap-go/__CAPGO_KEEP_1__-webview-crash/
文档:/docs/plugins/webview-crash/
- 继续使用 @GitHub/__CAPGO_KEEP_1__-webview-crash https://github.com/Cap-go/capacitor-webview-crash/
- 使用 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-webview-crash
Keep going from Using @capgo/capacitor-webview-crash
__CAPGO_KEEP_1__ https://capgo.com/Cap-go/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的原生能力在