WebView2 NavigationCompleted偶发ConnectionAborted错误原因咨询
WebView2偶发
WebErrorStatus=ConnectionAborted导航错误的常见触发原因 结合你贴的代码逻辑(提前初始化CoreWebView2、调用NavigateToString加载本地HTML、构造函数注册NavigationCompleted事件),该偶发错误通常来自以下几类场景:
- 导航被新请求主动打断:这是占比最高的诱因。如果上一次
NavigateToString/地址导航还没走完完整生命周期,就触发了新的导航动作(包括重复调用NavigateToString更新内容、调用CoreWebView2.Navigate切其他地址、手动调用Stop()/GoBack()/GoForward()、父容器切换Tab/控件重绘导致WebView2内部触发导航重置),被中途取消的旧导航就会在NavigationCompleted里返回ConnectionAborted,这类属于正常流程中断,不属于实际加载故障。 - 系统或运行时层面的进程中断:当设备内存占用过高时,系统会自动回收WebView2的后台渲染进程;另外WebView2运行时后台自动更新完成后会触发热重启,这两种场景下正在进行的导航会被强制终止,返回该错误。
- 初始化时序竞争:虽然你提前调用了
EnsureCoreWebView2Async,但如果_baseWebViewMessageHandler.InjectScript()的执行还没完全收尾,就触发了NavigateToString调用,或者页面内脚本发起的初始资源请求刚好撞上WebView2内部资源锁释放的时间窗口,也会偶发触发导航中断。 - 页面内容自带的中断逻辑:如果传入的HTML包含自动跳转逻辑(比如meta refresh标签、页面加载后立刻执行的
window.location跳转、跨域iframe加载被安全策略拦截),主框架的导航流程也会被标记为ConnectionAborted。
代码优化建议:你当前的逻辑直接把所有
IsSuccess=false的场景都走OnWebViewFailure故障处理,很容易把上述正常中断场景误判为故障。可以单独对ConnectionAborted状态做过滤,判断当前是否存在排队的新导航请求、WebView2核心对象是否正常可用后,再决定是否触发故障逻辑,能基本消除这类偶发误报。
内容的提问来源于stack exchange,提问作者Ashot
相关产品推荐
相关产品推荐

