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

Cor*_*y W 8 javascript printing mobile-safari ios8

我需要提供在成功保存和打印重定向到搜索页面后打印标签的功能.这适用于chrome,firefox,即iOS 6/7 safari等.但是,当从javascript发出window.print()时,似乎iOS 8不再停止执行javascript.

如果从iOS 8 Safari 导航到此jsfiddle示例(连接到计算机以便可以查看控制台日志)并单击"打印"按钮,您将看到打印对话框启动时将触发console.log.因此,如果您想打印然后导航,则会打印错误的屏幕,除非您有足够的时间来打印,这在这种情况下是不可接受的.

我做了一个人工延迟,因为在iOS 6/7中似乎得到了打印对话框,最终停止了javascript的执行.在那种情况下,500毫秒足以使其工作.

有没有其他人在使用Safari在iOS 8中做类似的事情时看到过这个问题?他们是否引入了一个新的事件来倾听我可以用来做这件事?

// Example Code
window.print();
setTimeout(function() {
    console.log('This should print after the print is issued in the iOS print dialog.');
}, 500);
Run Code Online (Sandbox Code Playgroud)

Ben*_*mer 8

您可以使用window.matchMedia(caniuse链接),结合window.onbeforeprintwindow.onafterprint(对于早期的IE支持).在这里这里可以找到使用matchMedia的好参考.

要满足使用matchMediaiOS,请使用嵌套事件.首先,监听要更改的媒体类型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
        });
    });
}
Run Code Online (Sandbox Code Playgroud)