0

我有一个带有“打印”按钮的网页。我想要的效果是通过打印或取消完成打印对话框后,页面感谢用户使用我们的网站。

打印函数大致如下所示:

function printThenThank() {
  window.print();
  $('.thankYou').removeClass('hidden');
  // alert('debug message');
}

我发现的问题是,有时打印输出中会出现“隐藏”的感谢信息,有时却不会。我已经多次运行它,有时在打印模式之前使用调试消息警报,有时仅在取消打印请求后才发出警报。

我最初认为window.print()是一个同步调用,但它的行为似乎更像是一个带有模态对话框的进程的异步触发器。

是否有任何可靠的跨平台方法可以确保在用户从 window.print() 对话框中选择打印或取消之前不会启动我想要执行的内容重写?

4

1 回答 1

1

为了对抗竞争条件,您可以尝试使用 setTimeout 触发谢谢,但这确实只有在调用是同步的情况下才有效。我不会对所有浏览器都依赖它。

相反,您想要做的是从打印件中隐藏感谢您,即使它在那里:

HTML:

<div class="thankYou no-print">Thanks for printing</div>

CSS:

@media print {    
  .no-print, .no-print *
  {
    display: none !important;
  }
}
于 2013-10-13T21:48:28.073 回答