在IOS的Safari中,打印和关闭JavaScript功能似乎不像其他浏览器那样起作用。如果您单独打^(?!(libc|RenderThread))
似乎很有效。但是,如果之后立即调用window.print()
,则尽管打印预览窗口仍处于打开状态,它似乎关闭了窗口并打印了预览,它不会等待完成打印或取消打印预览来关闭窗口,而是关闭窗口只需关闭立即打开的窗口。
我创建了一个用于打印表格的按钮。它将在新窗口中打开表格,并打开打印功能,并稍等片刻,以使浏览器可以打开页面并呈现表格。打印完成后,应该关闭窗口。
提示::如果您使用的是Mac和Xcode,则可以通过启动服务器window.close()
打开IPhone Simulator并使用python访问localhost。要访问模拟器,请依次打开Xcode和Xcode>打开开发人员工具>模拟器
代码如下:
python -m SimpleHTTPServer 8000
答案 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);
};