使用@capgo/capacitor-webview-crash
检测恢复的WebView崩溃,原生重启死掉的WebViews,定期重启长时间运行的WebViews以避免内存压力转化为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当没有任何事项待处理时。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不可用:
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
await WebViewCrash.restartWebView();
HTML 文本片段来自更长的 Capgo UI 字符串(父级键 `appflow_migration_step2`)。页面/区域:Appflow 比较/迁移营销复制。角色:网站复制句子。见于:页面 ionic-appflow.astro。保留 Capgo 产品/品牌和开发者术语完全不变。消息键 `appflow_migration_step2`(Appflow 迁移步骤 2)。 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__ 桥视图,因此创建了一个新的
- 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 为原生能力在使用 @capgo/capacitor-live-activities 中 @capgo/capacitor-live-activities 为实现细节在 @capgo/capacitor-live-activities 中,并且 使用 @capgo/capacitor-video-player 为原生能力在使用 @capgo/capacitor-video-player 中