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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:01:03