iOS 8 Safari打印重定向不会停止javascript执行

时间:2014-10-13 18:29:23

标签: javascript printing ios8 mobile-safari

我需要提供在成功保存和打印重定向到搜索页面后打印标签的功能。这适用于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);

1 个答案:

答案 0 :(得分:7)

您可以使用window.matchMediacaniuse link),结合window.onbeforeprintwindow.onafterprint(适用于早期的IE支持)。可以找到使用matchMedia的好参考herehere

为了满足在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
        });
    });
}