Mac-Catalyst(Sonoma 14.0)中WKWebView无法加载PDF的问题
macOS 14下WKWebView加载PDF白屏的解决方案
你当前通过load(_:mimeType:characterEncodingName:baseURL:)直接加载PDF数据的实现,在macOS 14中出现兼容性问题,导致白屏。以下是几个可行的解决办法:
直接加载本地文件URL
改用loadFileURL(_:allowingReadAccessTo:)方法加载PDF文件,macOS 14对本地文件的加载逻辑支持更稳定:do { guard anUrl.isFileURL else { print("URL不是本地文件路径") CommanMethods.sharedInstance.showAlert(title: "", message: "PreviewAlertKey".localized(withComment: ""), viewController: self) return } webView?.loadFileURL(anUrl, allowingReadAccessTo: anUrl.deletingLastPathComponent()) } catch { print("加载PDF失败: \(error)") CommanMethods.sharedInstance.showAlert(title: "", message: "PreviewAlertKey".localized(withComment: ""), viewController: self) }将PDF数据写入临时文件后加载
如果必须通过Data对象加载,可先将数据写入临时文件,再用文件URL加载,规避直接加载Data的兼容性问题:var pdfData: Data? = nil do { pdfData = try Data(contentsOf: anUrl) guard let aData = pdfData else { return } let tempDir = FileManager.default.temporaryDirectory let tempFileUrl = tempDir.appendingPathComponent("temp_\(UUID().uuidString).pdf") try aData.write(to: tempFileUrl) webView?.loadFileURL(tempFileUrl, allowingReadAccessTo: tempDir) } catch { print("PDF处理失败: \(error)") CommanMethods.sharedInstance.showAlert(title: "", message: "PreviewAlertKey".localized(withComment: ""), viewController: self) }校验baseURL有效性
原代码中URL.init(string: path as String)!的隐式解包可能导致无效baseURL,在macOS 14中可能触发加载异常,建议先校验:if let aData = pdfData, let baseUrl = URL(string: path as String) { webView?.load(aData, mimeType: "application/pdf", characterEncodingName: "utf-8", baseURL: baseUrl) } else { print("baseURL无效") CommanMethods.sharedInstance.showAlert(title: "", message: "PreviewAlertKey".localized(withComment: ""), viewController: self) }
内容的提问来源于stack exchange,提问作者Jones
相关产品推荐
相关产品推荐

