WKWebView无法弹出打印页面问题咨询
解决WKWebView中点击打印按钮无响应的问题
问题描述
在WKWebView中加载包含打印按钮的页面时,点击“Print this page”按钮没有任何反应,但在Safari中打开相同URL,点击按钮能正常唤起打印选项。
原因
WKWebView不会默认处理网页中的window.print()请求,需要通过实现WKUIDelegate的代理方法手动接管打印逻辑。
解决方案
修改ViewController代码,实现WKUIDelegate的webView(_:printFrame:)方法,调用系统打印控制器处理请求:
import UIKit import WebKit class ViewController: UIViewController, WKUIDelegate{ @IBOutlet weak var webVw: WKWebView! override func viewDidLoad() { super.viewDidLoad() // 必须设置webView的UIDelegate,否则代理方法无法触发 webVw.uiDelegate = self // 加载目标URL if let url = URL(string: "https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_print") { let request = URLRequest(url: url) webVw.load(request) } } // 处理网页发起的打印请求 func webView(_ webView: WKWebView, printFrame frame: WKFrameInfo) { let printController = UIPrintInteractionController.shared let printRenderer = webView.viewPrintFormatter() printController.printFormatter = printRenderer // 弹出系统打印选项界面 printController.present(animated: true) { (controller, completed, error) in if let error = error { print("打印失败:\(error.localizedDescription)") } } } }
关键要点
- 必须给
webVw设置uiDelegate = self,否则WKUIDelegate的代理方法不会被触发。 webView(_:printFrame:)方法会在网页调用window.print()时被触发,通过系统打印控制器可以唤起和Safari一致的打印选项界面。
内容的提问来源于stack exchange,提问作者Ben Rockey
相关产品推荐
相关产品推荐

