You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 13中WKWebView加载globo.com显示空白页,求解决方案

解决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

火山引擎 最新活动