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

使用HTML、JS、QZ-Tray向LQ-310打印机打印遇弹窗问题

QZ-Tray签名后仍弹出授权弹窗的问题排查方案

问题概述

  • 基于HTML、JS、QZ-Tray开发静态打印页面,目标打印机为LQ-310,可成功打印模拟数据,但始终弹出授权确认弹窗
  • 已按QZ-Tray官方签名流程配置,尝试从服务端签名改为客户端签名后,弹窗问题仍未解决
  • 问题代码仓库:Rusydy/print-qz-static

排查与解决方向

1. 签名配置有效性检查

  • 确认客户端签名使用的证书为PKCS#12格式,且包含可用的私钥;若证书格式错误,QZ-Tray会默认触发授权弹窗
  • 检查qz.security.setSignaturePromise()的实现逻辑:必须返回包含signature和certificate的有效对象,且签名值需与待签内容(toSign)匹配
  • 打开浏览器控制台,打印签名Promise的返回结果,确认无空值或格式错误

2. QZ-Tray信任列表配置

  • 打开QZ-Tray的设置面板,将当前页面的访问地址添加至信任域名列表:
    • 若为本地静态文件,需添加file://前缀(部分版本可能需要具体文件路径)
    • 更稳妥的方式是搭建本地HTTP服务(如python -m http.server 8000),用http://localhost:8000访问页面后,将该域名加入信任列表

3. 客户端签名逻辑时序问题

  • 确保签名Promise在调用qz.print()前已完成初始化,避免QZ-Tray在签名未就绪时触发默认授权流程
  • 参考标准客户端签名示例修正代码:
    qz.security.setSignaturePromise(function(toSign) {
      return new Promise((resolve, reject) => {
        // 替换为你的客户端签名逻辑,需正确对toSign进行签名
        const signed = /* 签名处理结果 */;
        const cert = /* 你的证书内容字符串 */;
        resolve({ signature: signed, certificate: cert });
      });
    });
    

4. 版本兼容性与日志排查

  • 升级QZ-Tray至最新稳定版,旧版本对客户端签名的支持可能存在兼容性问题
  • 查看QZ-Tray的日志文件(可在设置中找到日志路径),或浏览器控制台的报错信息,定位签名验证失败的具体原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:15:37