加载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
相关产品推荐
相关产品推荐

