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

设置App Transport Security后WKWebView仍显示空白屏求助

排查WKWebView空白屏问题(已配置ATS仍无效果)

我来帮你一步步排查这个问题,结合你的代码和ATS配置情况,常见的原因和解决方法如下:

1. 确认ATS配置是否正确生效

虽然你说已经配置了ATS,但可能存在配置细节错误导致WKWebView不识别:

  • 对于iOS 10及以上版本,WKWebView需要使用NSAllowsArbitraryLoadsInWebContent(而非全局的NSAllowsArbitraryLoads)来允许网页加载非HTTPS内容,或者针对特定域名配置例外。
  • 检查你的Info.plist,正确的ATS配置示例如下(二选一即可):
    <!-- 允许所有Web内容任意加载 -->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
    </dict>
    
    或者针对google.com配置域名例外:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>google.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSAllowsArbitraryLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

2. 检查WKWebView的IBOutlet是否正确关联

你的代码中使用了IBOutlet绑定WKWebView,但如果连线在Storyboard/XIB中意外断开,web变量会是nil,导致load(request)根本没执行:

  • 在viewDidAppear中添加打印语句验证:
    print("WKWebView instance: \(web)")
    
    如果输出是nil,重新在Storyboard中把控件和IBOutlet关联起来即可。

3. 验证URL有效性与网络连接

  • 虽然https://www.google.com是合法URL,但可以添加安全判断避免意外:
    guard let url = URL(string: "https://www.google.com") else {
        print("Invalid URL string")
        return
    }
    let request = URLRequest(url: url)
    web?.load(request)
    
  • 同时确认模拟器/测试设备的网络正常,能正常访问目标网址(比如用Safari打开试试)。

4. 添加WKNavigationDelegate捕获错误信息

通过代理可以直接获取加载过程中的错误,快速定位问题:

  • 让ViewController遵守WKNavigationDelegate,并设置代理:
    class ViewController: UIViewController, WKNavigationDelegate {
        @IBOutlet weak var web: WKWebView?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            web?.navigationDelegate = self // 设置代理
        }
        
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated) // 这里建议用参数animated,而非固定true
            guard let url = URL(string: "https://www.google.com") else {
                print("Invalid URL")
                return
            }
            let request = URLRequest(url: url)
            web?.load(request)
        }
        
        // 页面加载完成回调
        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
            print("Page loaded successfully!")
        }
        
        // 加载失败回调
        func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
            print("Load failed with error: \(error.localizedDescription)")
        }
    }
    
    运行后查看控制台输出的错误信息,就能知道是ATS限制、网络错误还是其他问题。

5. 清除缓存或重装App

有时候模拟器/设备的缓存会导致加载异常,尝试:

  • 重置模拟器(Hardware > Erase All Content and Settings)
  • 删除设备上的App后重新安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:56:17