window.print()和window.close()函数Safari IOS在不等待打印预览的情况下关闭窗口

时间:2018-12-24 17:30:58

标签: javascript ios mobile-safari

在IOS的Safari中,打印和关闭JavaScript功能似乎不像其他浏览器那样起作用。如果您单独打^(?!(libc|RenderThread))似乎很有效。但是,如果之后立即调用window.print(),则尽管打印预览窗口仍处于打开状态,它似乎关闭了窗口并打印了预览,它不会等待完成打印或取消打印预览来关闭窗口,而是关闭窗口只需关闭立即打开的窗口。

我创建了一个用于打印表格的按钮。它将在新窗口中打开表格,并打开打印功能,并稍等片刻,以使浏览器可以打开页面并呈现表格。打印完成后,应该关闭窗口。

提示::如果您使用的是Mac和Xcode,则可以通过启动服务器window.close()打开IPhone Simulator并使用python访问localhost。要访问模拟器,请依次打开Xcode和Xcode>打开开发人员工具>模拟器

代码如下:

python -m SimpleHTTPServer 8000

1 个答案:

答案 0 :(得分:0)

我避免了write(),因为它删除了DOM。然后,我同时添加了打印和关闭按钮。为避免渲染它们,我让它们消失并在10秒后重新出现。

// detect Safari
if (navigator.userAgent.indexOf("Safari") !== -1) {
  // make print button
  const print_button = document.createElement('button');
  const print_button_text = document.createTextNode("Print");
  print_button.appendChild(print_button_text);
  print_button.addEventListener(
    "click",
    function() {
      // hide the buttons before printing
      print_button.style.display = 'none';
      close_button.style.display = 'none';
      newWindow.print();
      // delay reappearing of the buttons to prevent them from showing on the print
      setTimeout(() => {
        print_button.style.display = 'block';
        close_button.style.display = 'block';
      }, 10000);
    },
    false
  );
  // make close button
  const close_button = document.createElement('button');
  const close_button_text = document.createTextNode('Close');
  close_button.appendChild(close_button_text);
  close_button.addEventListener(
    "click",
    function() {
      newWindow.close();
    },
    false
  );
  newWindow.document.body.appendChild(print_button);
  newWindow.document.body.appendChild(close_button);
};