【问题标题】:iOS 8 Safari print redirect doesn't stop javascript executioniOS 8 Safari 打印重定向不会停止 javascript 执行
【发布时间】:2014-12-08 09:41:36
【问题描述】:

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

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

我做了一个人为的延迟,因为在 iOS 6/7 中似乎让打印对话框最终停止了 javascript 的执行。在那种情况下,500ms 就足以让它工作。

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

【问题讨论】:

  • 以下可能与以前版本的 chrome 类似,但似乎并不完全正确,因为 setTimeout 会修复它...Print Window Close Results in Print Preview
  • 我仍然很好奇是否有人找到了解决方案,所以请随时回复并告诉我。现在,我将不得不查看 iOS 8 的用户代理,并为打印和重定向设置不同的流程,这将使其成为手动操作来继续类型的事情。提前致谢!

标签: javascript printing ios8 mobile-safari


【解决方案1】:

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

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

【讨论】:

  • 第 5 行应该是 screenQuery.addListener(function() { ... 不是这样?
  • @3Dom,我相信你是对的。我纠正了它。谢谢!
  • ios 12.1.2 中弹出打印对话框时,此代码似乎立即触发
猜你喜欢
  • 2014-11-06
  • 2016-08-20
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2012-06-07
  • 2014-05-16
相关资源
最近更新 更多