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

加载HTML字符串时WKNavigationDelegate报NSURLErrorDomain error -999错误

解决WKWebView加载HTML字符串时抛出NSURLErrorDomain -999错误的方案

嘿,这个-999错误我之前踩过坑!它本质上是请求被取消的信号,加载本地HTML字符串时出现这个问题,大多和WKWebView的导航生命周期或加载逻辑有关,给你几个实用的解决思路:

  • 避免重复发起加载请求
    如果在WebView还没完成上一次加载时,又调用了loadHTMLString:baseURL:,之前的请求会被主动取消,从而触发-999错误。可以在加载前先检查状态:

    if webView.isLoading {
        webView.stopLoading()
    }
    webView.loadHTMLString(yourHTMLContent, baseURL: yourBaseURL)
    
  • 合理设置baseURL参数
    很多人图省事把baseURL传nil,这可能导致WKWebView内部处理导航时出现异常。建议传一个有效的URL——哪怕是本地资源目录的URL,或者虚拟的本地主机URL都行:

    // 示例:使用App主包路径作为baseURL
    let baseURL = URL(fileURLWithPath: Bundle.main.bundlePath)
    webView.loadHTMLString(yourHTMLContent, baseURL: baseURL)
    
  • 在代理中过滤无害的-999错误
    这个错误很多时候是“良性”的——比如主动停止加载、页面内部跳转时都会触发。可以在didFail代理方法里直接忽略它,不要当成真正的加载失败处理:

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        guard let nsError = error as NSError else {
            // 处理其他错误
            print("加载失败:\(error.localizedDescription)")
            return
        }
        // 忽略NSURLErrorDomain下的-999取消错误
        if nsError.code == -999 && nsError.domain == NSURLErrorDomain {
            return
        }
        // 处理真正的加载异常
        print("加载失败:\(nsError.localizedDescription)")
    }
    
  • 排查WebView配置冲突
    如果你给WKWebView配置了自定义的WKURLSchemeHandler或者严格的内容规则,可能会拦截加载HTML字符串时的内部请求,导致请求被取消。可以先改用默认的WKWebViewConfiguration测试,看错误是否消失。

总的来说,-999错误大多是导航被中断导致的,优先排查重复加载的情况,合理设置baseURL,必要时过滤这个无害错误,基本就能解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:51:27