【问题标题】:window.print(); does not work in Safari窗口.打印();在 Safari 中不起作用
【发布时间】:2015-07-01 20:31:45
【问题描述】:

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

【问题讨论】:

  • 它不是打印方法,它的点击功能在 safari 中不起作用
  • 该解决方案不再有效
  • @ODelibalta 真的,天哪。 k 我会删除并试一试
  • 在 onclick 函数中放置一个控制台日志,这样您就可以看到该函数是否正在触发。

标签: javascript safari


【解决方案1】:

试试这个解决方案:

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

【讨论】:

  • 这个 try catch 语句没有为我运行,但 document.execCommand 在 Safari 中确实有效。我重写了它以检查浏览器并有条件地运行每个语句。
  • 这将在 Firefox 94 上静默失败而不会引发任何错误。
【解决方案2】:

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

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

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

此外,为了使其始终如一地工作,我必须将 $.xhrPool.abortAll 函数包装在一个较短的超时时间(100 毫秒)内。

我的点击处理函数(简化)如下所示:

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

【讨论】:

    【解决方案3】:

    如果您将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 处理程序返回 falsy,这会取消显示任何“弹出窗口”。这可能是上面带有myFunction() 代码的示例可能在onclick="window.print()" 可能不起作用时起作用的原因。

    【讨论】:

      【解决方案4】:

      window.print()Safari 没有问题。抱歉,我无法在 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>
      

      【讨论】:

        猜你喜欢
        • 2018-02-15
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2014-09-16
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多