如何在Edge浏览器中实现打印对话框自动确认打印功能?
解决队列号票据自动打印的问题
首先明确:浏览器出于安全和用户体验限制,不允许JS直接绕过打印确认对话框,但可以通过以下方式实现接近自动打印的效果:
方案1:配置浏览器允许静默打印(针对Edge/Chrome)
- 打开Edge浏览器,输入
edge://settings/content/printing进入打印设置 - 找到允许网站跳过打印预览并直接打印选项,开启后添加你的站点到允许列表
- 此时调用
window.print()会直接触发打印,不再弹出对话框
方案2:优化现有代码的稳定性
你的当前代码依赖setTimeout等待页面加载,可能因渲染延迟导致打印内容异常,可改用页面加载事件替代:
function printLayout() { var _el = $('<div>') var _h = $('head').clone() var _p = $('#outprint').clone() _h.find('title').text("Queue Number - Print") _el.append(_h) _el.append(_p) var nw = window.open('', '_blank', 'width=700,height=500,top=75,left=200') nw.document.write(_el.html()) nw.document.close() // 监听新窗口加载完成,替代不稳定的setTimeout nw.addEventListener('load', function() { nw.print(); // 监听打印完成事件(部分浏览器支持) nw.addEventListener('afterprint', function() { nw.close(); $('#uni_modal').modal('hide'); window.location.href = '/queuing/kiosk/'; }); }); } $(function() { printLayout(); })
注意:afterprint事件在不同浏览器中兼容性有差异,若无效可保留短时间setTimeout作为备用方案
方案3:无头浏览器实现完全自动打印(适合无人值守场景)
如果是服务器端或自助 kiosk 设备,可使用Puppeteer(支持Edge无头模式)实现无交互打印:
const puppeteer = require('puppeteer'); async function autoPrintQueue() { const browser = await puppeteer.launch({ executablePath: 'path/to/edge.exe', // 替换为你的Edge可执行文件路径 headless: 'new', args: ['--enable-print-preview'] }); const page = await browser.newPage(); // 直接传入打印内容 await page.setContent($('#outprint').html()); // 静默打印,无需对话框 await page.print({ silent: true, deviceName: '你的目标打印机名称' }); await browser.close(); window.location.href = '/queuing/kiosk/'; }
内容的提问来源于stack exchange,提问作者Angelo
相关产品推荐
相关产品推荐

