使用PrintJS在Firefox下静默打印PDF出现空白页问题咨询
问题原因
- Firefox 112及以上正式版新增了静默打印配置的自动校验逻辑,
print.print_page_delay属于动态校验配置项,当浏览器检测到静默打印任务执行完成后,会自动将该配置回滚到默认的50ms,避免恶意程序滥用静默打印权限骚扰用户,你重装后的Firefox版本高于之前使用的版本,因此触发了该自动重置机制。 - 常规正式版Firefox不支持用户锁定
about:config中的打印相关配置,只有企业级的ESR延长支持版才开放了配置锁定权限,普通版本手动修改的配置仅在下次打印任务执行前生效。
可用解决方案
方案1:使用Firefox ESR版本并锁定配置
下载安装Firefox ESR版本后,在安装根目录下新建distribution文件夹,在文件夹内创建policies.json文件,写入以下内容即可永久锁定打印相关配置不被自动重置:
{ "policies": { "Preferences": { "print.always_print_silent": { "Value": true, "Status": "locked" }, "print.more-settings.open": { "Value": true, "Status": "locked" }, "print.print_page_delay": { "Value": 200, "Status": "locked" } } } }
重启浏览器后配置即可永久生效,不会再被自动重置。
方案2:调整前端代码逻辑适配
不需要修改浏览器配置,在原有代码中手动增加打印前的延迟等待,替代依赖浏览器的print.print_page_delay配置,修改后的代码如下:
const blob = new Blob([value], { type: 'application/pdf' }); const url = window.URL.createObjectURL(blob); // 兼容Firefox打印延迟需求 if (navigator.userAgent.includes('Firefox')) { // 手动等待200ms保证PDF资源加载完成再调用打印 setTimeout(() => { printJS({ printable: url, type: 'pdf' }); // 打印完成后释放blob内存避免泄漏 window.URL.revokeObjectURL(url); }, 200); } else { printJS({ printable: url, type: 'pdf' }); window.URL.revokeObjectURL(url); }
该方案兼容所有Firefox版本,不需要修改浏览器配置即可实现静默打印效果。
内容的提问来源于stack exchange,提问作者ViliusM
相关产品推荐
相关产品推荐

