window.print();在Safari中不起作用

时间:2015-07-01 20:31:46

标签: javascript safari

使用onclick链接Safari时,打印方法在窗口上不起作用。通过放置在按钮上的onclick代码在Safari中进行网页打印的替代方法是什么?另一个奇怪的行为是当我尝试关闭窗口时,会出现浏览器原生的打印对话框。

4 个答案:

答案 0 :(得分:1)

我在使用Safari浏览器时遇到了类似的问题(而不是其他任何浏览器)。 在我的情况下,中止当前正在进行的所有API调用会立即显示本机打印对话框。

我猜测在关闭标签/页面时对话框出现的原因是所有网络请求都被取消了。

以下是如何创建ajax请求池(使用jQuery时)的示例: Stop all active ajax requests in jQuery

另外,为了使其一致地工作,我必须在短暂的超时(100ms)内包装$.xhrPool.abortAll函数。

我的点击处理函数(简化)看起来像这样:

function myFunction() {
    window.print();
    window.setTimeout(function () {
        $.xhrPool.abortAll()
    }, 100);
}

答案 1 :(得分:1)

如果您将 window.print() 的结果返回给 onclick 处理程序,Safari 将不会显示打印窗口。我使用 React 并且必须进行以下更改:

//code that does not work:
<button type="button" onClick={() => window.print()}>Print!</button>

//code that does work:
<button type="button" onClick={() => { window.print(); }}>Print!</button>

我测试过的所有其他浏览器(iOS 上的 Safari 除外)都可以正常工作,例如 iOS 上的 Chrome 或桌面版 Chrome。

我最好的猜测是,由于 window.print 在 Safari 中已知是异步的,因此 window.print() 可能会向 onclick 处理程序返回 false,从而取消显示任何“弹出窗口”。这可能就是上面带有 myFunction() 代码的示例在 onclick="window.print()" 可能不起作用时可能起作用的原因。

答案 2 :(得分:0)

尝试以下解决方案:

try {
  // Print for Safari browser
  document.execCommand('print', false, null)
} catch {
  window.print()
}

答案 3 :(得分:-1)

使用 Safari window.print()没问题。对不起,我无法尝试使用Windows操作系统,但是跟随代码适用于MacOS:

<!DOCTYPE html>
<html>
<body>
  <button onclick="myFunction()">Click me</button>
  <a href="#" onclick="myFunction()">Click link</a>

  <script>
    function myFunction() {
      window.print();
    }
  </script>

</body>
</html>
相关问题