You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WKWebView出现activityTimedOut错误无法通过代理捕获该如何处理

解决方案

核心原因

你遇到的是WKWebView独立的WebContent进程被系统超时回收的场景:

  • 你用到的两个didFail系列回调仅在页面导航加载过程中发生错误时触发,比如域名解析失败、网络异常、服务端返回错误码等场景
  • TimedActivity::activityTimedOut和com.apple.WebKit.WebContent报错属于WebKit内核进程生命周期异常,不属于导航错误,因此不会触发上述两个回调

捕获方法

iOS 9.0+ 官方原生方案

直接实现WKNavigationDelegate的webViewWebContentProcessDidTerminate回调即可,该方法会在WebContent进程被系统终止(包括超时回收、内存不足被杀、进程异常崩溃等所有场景)时触发,直接在回调内执行重载逻辑即可:

func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
    // 捕获到进程终止,直接重新加载页面
    webView.reload()
}

低版本兼容方案

如果需要适配iOS 9以下的系统,可以通过定时心跳检测判断进程是否存活:

  • 每隔固定间隔(比如30s)调用evaluateJavaScript执行一段简单逻辑,判断是否返回错误
  • 若回调返回错误,说明WebContent进程已失效,主动执行reload即可
    示例代码:
// 定时检测web进程是否存活
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { [weak self] _ in
    guard let self = self else { return }
    self.webView.evaluateJavaScript("1") { _, error in
        if error != nil {
            // 进程已失效,重新加载
            self.webView.reload()
        }
    }
}

额外优化建议

如果频繁出现该超时错误,建议排查前端页面是否存在以下问题:

  • 存在未释放的长定时任务、死循环逻辑
  • 页面内存占用持续上涨未释放
  • 长时间运行 heavy computation 类逻辑

内容的提问来源于stack exchange,提问作者William Hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 07:00:02