指南
WebView 崩溃教程
使用 @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 在设备本地时区内的 5 个字段 cron 日程表中,例如 restartCron 每日 03:00 重启。 不要同时配置两个调度:当 0 3 * * * 设置且 restartCron 大于时,native 初始化会抛出致命配置错误。 restartIntervalMs __CAPGO_KEEP_0__ 0. 在使用短时间调度之前,务必将关键应用状态保存下来。
手动原生重启
Call restartWebView() 当 JavaScript 决定原生 WebView 应该被预先替换时,例如在内存密集型工作流程之后:
await WebViewCrash.restartWebView();
该方法写入 reason: 'manualRestart' 并要求原生 code 创建一个新的 WebView。Android 重建了宿主活动。 iOS 重建了 Capacitor 桥接视图,因此创建了一个新的 WKWebView 而不是重新加载当前页面。
全局参考
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- 文档:/docs/plugins/webview-crash/
继续阅读使用 @capgo/capacitor-webview-crash
如果您正在使用 使用@capgo/capacitor-webview-crash 来规划原生媒体和界面行为,连接它与 @capgo/capacitor-webview-crash 在@capgo/capacitor-webview-crash中获取实现细节 入门指南 在入门指南中获取实现细节 使用@capgo/capacitor-live-activities for the native capability in Using @capgo/capacitor-live-activities, @capgo/capacitor-live-activities 在@capgo/capacitor-live-activities中获取实现细节, 使用@capgo/capacitor-video-player 为native能力在使用@capgo/capacitor-video-player中。