Xcode 16.1中WKUIDelegate方法未调用问题求助
WKUIDelegate 弹窗方法在Xcode 16.1构建后不触发的解决办法
iOS 18(对应Xcode 16.1)对WKWebView的JavaScript弹窗处理逻辑做了API更新,原有的runJavaScriptAlertPanelWithMessage(_:initiatedByFrame:completionHandler:)方法已被废弃,系统不再调用旧版方法,这就是问题的核心原因。
解决步骤:
替换为新的异步方法
苹果在iOS 18引入了基于async/await的新版WKUIDelegate弹窗方法,替换旧实现即可恢复功能:func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo) async { let alertController = UIAlertController(title: nil, message: message, preferredStyle: UIDevice.current.userInterfaceIdiom == .pad ? .alert : .actionSheet) alertController.addAction( UIAlertAction(title: "Ok".localized, style: .default) ) if let controller = topMostViewController() { await controller.present(alertController, animated: true) } }兼容旧版本系统
如果需要同时支持iOS 17及以下版本,可以保留旧方法并添加版本标记,同时实现新方法:// 兼容iOS 17及更早版本 @available(iOS, deprecated: 18.0) func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { let alertController = UIAlertController(title: nil, message: message, preferredStyle: UIDevice.current.userInterfaceIdiom == .pad ? .alert : .actionSheet) alertController.addAction( UIAlertAction(title: "Ok".localized, style: .default, handler: { _ in completionHandler() }) ) if let controller = topMostViewController() { controller.present(alertController, animated: true) } } // iOS 18+ 适配新API @available(iOS 18.0, *) func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo) async { let alertController = UIAlertController(title: nil, message: message, preferredStyle: UIDevice.current.userInterfaceIdiom == .pad ? .alert : .actionSheet) alertController.addAction( UIAlertAction(title: "Ok".localized, style: .default) ) if let controller = topMostViewController() { await controller.present(alertController, animated: true) } }
额外检查项:
- 确认你的
WKWebView实例的uiDelegate属性已正确赋值,未被其他代码意外覆盖 - 排查是否有自定义的WebView拦截逻辑,可能阻止了弹窗请求的传递
内容的提问来源于stack exchange,提问作者G33RY
相关产品推荐
相关产品推荐

