我需要提供在成功保存和打印重定向到搜索页面后打印标签的功能。这适用于chrome,firefox,即iOS 6/7 safari等。但是,当从javascript发出window.print()时,似乎iOS 8不再停止执行javascript。
如果您从iOS 8 Safari导航到this jsfiddle example(连接到计算机以便查看控制台日志)并单击“打印”按钮,您将看到打印对话框启动时将触发console.log 。因此,如果您想打印然后导航,则会打印错误的屏幕,除非您有足够的时间来打印,这在这种情况下是不可接受的。
我做了一个人工延迟,因为在iOS 6/7中似乎得到了打印对话框,最终停止了javascript的执行。在那种情况下,500毫秒足以使其工作。
在iOS 8中从Safari进行类似的操作时有没有其他人看过这个问题?他们是否引入了一个新的事件来倾听我可以用来做这件事?
// Example Code
window.print();
setTimeout(function() {
console.log('This should print after the print is issued in the iOS print dialog.');
}, 500);
答案 0 :(得分:7)
您可以使用window.matchMedia
(caniuse link),结合window.onbeforeprint
和window.onafterprint
(适用于早期的IE支持)。可以找到使用matchMedia的好参考here和here。
为了满足在iOS上使用matchMedia
,请使用嵌套事件。首先,侦听要更改为print
的媒体类型。然后,在该回调中,侦听媒体以更改回screen
。
if (window.matchMedia) {
var printQuery = window.matchMedia('print');
printQuery.addListener(function() {
var screenQuery = window.matchMedia('screen');
screenQuery.addListener(function() {
//actions after print dialog close here
});
});
}