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

Xcode14.1中WKWebView调用evaluateJavaScript时崩溃报错

Xcode 14.1中WKWebView异步调用evaluateJavaScript崩溃问题

在Xcode 14.1环境下使用Swift开发时,调用WKWebView的evaluateJavaScript异步方法会触发崩溃,该问题已在iOS端验证,macOS端大概率存在相同问题。

崩溃复现代码

let webView = WKWebView()
Task {
    try? await webView.evaluateJavaScript("console.log('hello world')")
}

报错信息

:0: 致命错误:隐式解包可选值时意外发现nil

问题原因

崩溃的核心原因是:创建的WKWebView实例既没有被强引用持有,也没有被添加到视图层级中。当异步任务开始执行时,WebView实例可能已经被系统释放,导致其内部隐式解包的可选值变为nil,进而触发致命错误。

修复方案

要解决这个问题,需要满足两个条件之一(或同时满足):

  • 确保WKWebView实例被强引用持有(比如作为类的属性)
  • 将WKWebView添加到视图层级中

修复后的示例代码:

class ViewController: UIViewController {
    // 用类属性强引用WKWebView实例
    private let webView = WKWebView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 将WebView添加到视图层级,确保其生命周期稳定
        webView.frame = view.bounds
        view.addSubview(webView)
        
        // 在WebView初始化完成后执行JS代码
        Task {
            try? await webView.evaluateJavaScript("console.log('hello world')")
        }
    }
}

如果不需要显示WebView,至少要保证实例被强引用持有,并且建议等待WebView完成页面加载(通过WKNavigationDelegate的webView(_:didFinish:)代理方法确认)后再执行JavaScript代码,避免因初始化未完成导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:55:20