@ capgo/ 电容- webview- crash
在 WebView 崩溃时保持您的 Capacitor app 活性: 检测已恢复的崩溃, 在本地重启已死亡的 Web Victor , 并回收长期运行的 Web Victor 在内存耗尽之前 .
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-webview-crash在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 加上@capgo/capor-webview-crash到我的Capacitor应用上并把它接上" 代理设置指南 • 妇女 主机磁共振
主要特点
- 崩溃恢复数字 :
restartOnCrash当 WebView 的渲染器进程终止时重新启动它. - 回收信息数字 :
getPendingCrashInfo()财务报告和审定财务报表clearPendingCrashInfo(),加上webViewRestoredAfterCrash活动. - 计划再循环数字 :
restartIntervalMs或者说restartCron替换长期运行的 Web 视图. - 手动重新启动数字 :
restartWebView()创建新的 Webview . - 测试数字 :
simulateCrashRecovery()练习恢复流程. - 平台: iOS和Android. 互联网档案馆的存檔,存档日期2013-12-21. Web 只支持测试帮助者.
它会做什么
- Android 报告时存储本地崩溃标记
onRenderProcessGone。 。 。 . - Hooks the iOS WebView 终止回调,并坚持等效崩溃元数据.
- 崩溃后恢复了WebView的本地状态,所以恢复不依赖于仍在运行的JavaScript运行时间.
- 可以重启WebView在固定的本地间隔上为站台,POS,指示器,遥测等总是运行的应用程序.
- 让 JavaScript 请求本地的 WebVew 重新启动
restartWebView()当应用程序想要主动回收记忆时. - 通过一个事件,一个投票方法,和一个测试恢复流量的模拟帮助器来展示标记.
- 以本地存储模拟相同回收流量的网络实施.
它不会做什么
- 防止潜在的WebView崩溃发生.
- 自动恢复丢失的 CavaScript 状态 .
- 替换应用程序级状态持久性 。 在启动预定重启之前, 坚持临界状态 .
兼容性
| 插件版本 | 电容兼容性 | 维护 |
|---|---|---|
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | 应要求 |
政策:
- 新的插件从版本开始
8.0.0(8号电站基线). - 对更古老的Capacitor主机的后向相容性按需支持.
安装
您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-webview-crash` plugin in my project.
如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:
npm install @capgo/capacitor-webview-crash
npx cap sync
使用量
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();
if (pending.value) {
console.log('Pending crash or restart marker', pending.value);
}
使用 simulateCrashRecovery() 在开发或自动测试中进行你的恢复UI,而不会强迫真正的本地WebView崩溃.
打电话 restartWebView() 当当前 JavaScript 运行时间决定本地 WebView 应替换时 :
await WebViewCrash.restartWebView();
呼叫中写着一个待定的标记 reason: 'manualRestart',然后本地代码重新启动 WebView。 Android 重现主机活动. iOS 重建 Capacitor 桥视图, 这样新建 WKWebView 创建,而不是重新装入当前页面.
本地自动重新启动
配置插件在 capacitor.config.ts 因此,即使JavaScript运行时间不可用,也会在本地代码中重新启动决定:
import type { CapacitorConfig } from '@capacitor/cli';
import type { WebViewCrashPluginConfig } from '@capgo/capacitor-webview-crash';
const webViewCrash: WebViewCrashPluginConfig = {
// Keep native crash recovery enabled. This is the default.
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;
对持续开放数天的应用程序使用预定重启:站台屏幕,控制室仪表板,售出点终端,仓库扫描仪,车辆平板电脑,或者任何无法依赖用户强制关闭的Capacitor应用程序. 重启是本地的, 写一个待定的标记 reason: 'periodicRestart',然后创建新的 Webview.
设定 restartIntervalMs 您的产品可以容忍或设定的维护窗口 restartCron 诸如: 0 3 * * * 每天3: 00重启. restartCron 在设备本地时区中使用 5- 字段语法并支持 *、列表、范围和步骤。 请不要同时配置两个调度: 本地初始化在 restartCron 设置和 restartIntervalMs 大于 0。用户将获得一个新的 JavaScript 运行时间, 因此在启用短间隔或 cron 调度之前, 持续未保存的形式状态、 已排队的事件和进行中的工作 .
配置类型
export interface WebViewCrashPluginConfig {
restartOnCrash?: boolean;
restartIntervalMs?: number;
restartCron?: string;
restartAfterCrashDelayMs?: number;
}
平台说明
- iOS: (英语) 对电容器的用法
WebViewDelegationHandler在 Capacitor 重新装入 WebView 之前坚持崩溃元数据。 手动重启和计划重新启动重建 Capacitor 桥视图, 从而新建WKWebView创建实例。 不需要额外的权限 . - 机器人: 注册 a 管理员
WebViewListener并持续从onRenderProcessGone. crash并计划重启重设桥接并再创建主机活动,给应用程序一个新鲜的Webview. 不需要额外的权限 . - 网络 : 没有真正的浏览器崩溃检测 。 网络执行仅以本地存储来模拟恢复流量.
文档
API 密码
getPendingCrashInfo()clearPendingCrashInfo()simulateCrashRecovery()restartWebView()addListener('webViewRestoredAfterCrash' | 'webViewRestoredAfterRestart', ...)removeAllListeners()- 接口
- 类型异名
恢复的WebView崩溃和重启检测的API控制器 .
获取PingingCrashInfo ()
getPendingCrashInfo() => Promise<PendingCrashInfoResult>
如果存在的话, 返回待定的本地崩溃或重新启动标记 .
回返情况: Promise<PendingCrashInfoResult>
清除PendingCrashInfo( )
clearPendingCrashInfo() => Promise<void>
在应用程序处理回收后清除存储的标记 .
模拟崩溃恢复( )
simulateCrashRecovery() => Promise<PendingCrashInfoResult>
创建一个假崩溃标记, 以便本地测试恢复流量 .
回返情况: Promise<PendingCrashInfoResult>
重新启动 WebView ()
restartWebView() => Promise<PendingCrashInfoResult>
存储手动重启标记并请求本地代码创建新鲜的WebView.
在Android上,这个重现了主机活动. 在iOS上,它重建 Capacitor 桥面,这样一个新的 WKWebView
实例创建,而不是重新装入当前页面.
回返情况: Promise<PendingCrashInfoResult>
添加 listener ("webView Rested After Crash" +"webView Rested After Restart", ...) 的监听器
addListener(eventName: 'webViewRestoredAfterCrash' | 'webViewRestoredAfterRestart', listenerFunc: (info: WebViewCrashInfo) => void) => Promise<PluginListenerHandle>
在新的 JavaScript 运行时间附加一个收听器后起火,一个匹配的标记仍然待定.
| 参数 | 类型 |
|---|---|
eventName | 'webViewRestoredAfterCrash' | 'webViewRestoredAfterRestart' |
listenerFunc | (info: WebViewCrashInfo) => void |
回返情况: Promise<PluginListenerHandle>
删除所有收听器( )
removeAllListeners() => Promise<void>
删除所有插件听众.
接口
待处理的崩溃信息
等待崩溃或重启标记返回 JavaScript .
| Prop | 类型 | 说明 |
|---|---|---|
value | WebViewCrashInfo | null | 存储崩溃或重启元数据,或 null 当没有标记待决时. |
网络视频崩溃信息
上一个 WebView 进程死后或重新启动后, 本地捕获的元数据 .
| Prop | 类型 | 说明 |
|---|---|---|
platform | WebViewCrashPlatform | 检测并存储标记的平台. |
timestamp | number | 当标记被写入时, 用毫秒表示 . |
timestampISO | string | ISO-8601 版本,内容为 timestamp。 。 。 . |
reason | WebViewCrashReason | 平台特定原因为崩溃或重启标记. |
url | string | 标记被写入时最后已知的 WebView URL . |
didCrash | boolean | 仅来自 Android 的提示 RenderProcessGoneDetail.didCrash()。 。 。 . |
rendererPriorityAtExit | number | 退出时只报告Android渲染器优先级. |
appState | WebViewCrashAppState | 标记被写入时捕获到的只有iOS应用程序状态. |
插件听筒
| Prop | 类型 |
|---|---|
remove | () => Promise<void> |
类型异名
WebView CrashPlat窗体
生产被存储标记的平台.
'android' | 'ios' | 'web'
WebView CrashReason (英语)
上一个 WebView 失败或重新启动的原生原因报告 .
'renderProcessGone' | 'webContentProcessDidTerminate' | 'periodicRestart' | 'manualRestart' | 'simulated'
WebView CrashApp 状态
WebView进程死后,在iOS上捕获了最佳应用状态.
'active' | 'inactive' | 'background' | 'unknown'