使用@capgo/capacitor-webview-crash
检测恢复的WebView崩溃、原生重启死掉的WebViews以及在内存压力转变为OOM之前定期回收长时间运行的WebViews。
安装
npm install @capgo/capacitor-webview-crash
npx cap sync
此插件暴露的内容
- 原生重启WebView崩溃的iOS和Android。
- 用于长时间运行的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 决定本机 WebView 应该被替换时调用:例如,在内存密集型工作流程之后: restartWebView() 该方法写入
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 创建一个新的 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 的原生能力,