iOS 8 Safari打印重定向不';不要停止javascript执行

iOS 8 Safari打印重定向不';不要停止javascript执行,javascript,printing,ios8,mobile-safari,Javascript,Printing,Ios8,Mobile Safari,我需要提供在成功保存时打印标签的能力,并在打印后重定向到搜索页面。这适用于chrome、firefox、ie、iOS 6/7 safari等。但是,当从javascript发出window.print()时,iOS 8似乎不再停止javascript的执行 如果您从iOS 8 Safari(连接到计算机以便查看控制台日志)导航到并单击打印按钮,您将看到打印对话框打开时将触发console.log。因此,如果您想打印然后导航,您将打印错误的屏幕,除非您有足够的时间来点击打印,这在本例中是不可接受的

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

如果您从iOS 8 Safari(连接到计算机以便查看控制台日志)导航到并单击打印按钮,您将看到打印对话框打开时将触发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);

您可以将
window.matchMedia
()与
window.onbeforeprint
window.onafterprint
(用于早期IE支持)结合使用。可以找到和找到使用matchMedia的良好参考资料

要在iOS中使用
matchMedia
,请使用嵌套事件。首先,收听媒体类型是否更改为打印。然后,在该回调中,监听媒体以切换回
屏幕

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
        });
    });
}

以下内容可能与之前版本的chrome类似,但似乎并不完全正确,因为setTimeout会修复它。。。我仍然很好奇是否有人找到了解决这个问题的方法,所以请随时回复并让我知道。现在我要看看iOS 8的用户代理,为打印和重定向设置一个不同的流程,这将使它成为一个手动操作来继续这类操作。提前谢谢!第5行应该是screenQuery.addListener(function(){…不是吗?@3Dom,我相信你是对的。我更正了。谢谢!当ios 12.1.2中弹出打印对话框时,此代码似乎会立即触发