iOS 13中WKWebView加载globo.com显示空白页,求解决方案
我之前也碰到过WKWebView加载特定网站出空白的情况,结合你的问题,给你几个可行的排查方向:
检查User-Agent限制
很多网站会对请求的User-Agent做校验,WKWebView的默认UA可能被globo.com识别为非正规浏览器,导致拒绝返回内容或者重定向失败。你可以尝试设置一个模仿Safari移动端的自定义UA,比如在viewDidLoad里添加:webView.customUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"设置完再执行加载请求,看看能不能正常显示。
排查网络请求和内容安全策略(CSP)
打开Safari的调试工具,切换到「网络」标签页,重新加载页面,查看所有请求的状态码:- 有没有3XX的重定向请求没正常完成?
- 有没有403、404这类错误?
另外看看「控制台」里有没有CSP相关的报错,有些网站的严格内容安全策略会阻止WKWebView加载资源,导致页面空白。
验证SSL证书处理
虽然globo.com是HTTPS网站,但可能存在证书链不完整或者WKWebView不支持的SSL特性,导致证书验证失败终止加载。你可以在WKNavigationDelegate里添加证书挑战的处理逻辑(仅用于调试,上线前务必确认证书合法性):func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { guard let serverTrust = challenge.protectionSpace.serverTrust else { completionHandler(.performDefaultHandling, nil) return } let credential = URLCredential(trust: serverTrust) completionHandler(.useCredential, credential) } else { completionHandler(.performDefaultHandling, nil) } }添加后再测试加载,看是否能正常显示内容。
检查JavaScript兼容性
很多网站依赖JavaScript渲染页面,WKWebView默认允许JS,但可能globo.com的JS代码里有针对WKWebView的检测,或者使用了某些WKWebView不兼容的API。你可以在Safari调试控制台里执行console.log(document.body.innerHTML),看看页面是否有实际内容,同时查看控制台的JS报错信息,定位具体的兼容问题。补充ATS的域名特定配置
虽然你已经添加了NSAllowsArbitraryLoadsInWebContent,但有时候针对特定域名的ATS配置会更有效。尝试在info.plist里添加globo.com的例外配置:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoadsInWebContent</key> <true/> <key>NSExceptionDomains</key> <dict> <key>globo.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSAllowsArbitraryLoads</key> <true/> </dict> </dict> </dict>配置完重新编译运行,测试页面加载情况。
内容的提问来源于stack exchange,提问作者Weslei Dias




