【发布时间】:2018-12-24 17:30:58
【问题描述】:
在 IOS 的 Safari 中,打印和关闭 JavaScript 功能似乎不像其他浏览器那样工作。如果您单独致电window.print(),它似乎可以工作。但是,如果您在之后立即调用window.close(),它似乎会关闭窗口并打印预览,尽管打印预览窗口仍处于打开状态,但它不会等待打印预览完成或取消以关闭窗口而只是关闭窗户立即打开。
我创建了一个用于打印表格的按钮。它在新窗口中打开表格并打开打印功能,并等待一点时间让浏览器打开页面并呈现表格。打印完成后它应该关闭窗口。
提示:如果您有 Mac 和 Xcode,您可以打开 iPhone 模拟器并通过启动服务器 python -m SimpleHTTPServer 8000 使用 python 访问本地主机。要访问模拟器,请打开 Xcode,然后 Xcode > Open Developer Tools > Simulator
代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body>
<table class="table">
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
<button onclick="myPrintFunction()">Click me</button>
<script>
function myPrintFunction() {
let divToPrint = document.getElementsByClassName("table")[0];
if (typeof divToPrint !== 'undefined') {
let newWin = window.open();
newWin.document.write('<h1>PRINT FRIENDLY</h1>');
newWin.document.write(divToPrint.outerHTML);
newWin.document.close();
newWin.focus();
setTimeout(()=>{
newWin.print();
newWin.close();
}, 1000);
} else {
alert('NO EVENTS TO PRINT!');
}
}
</script>
</body>
</html>
【问题讨论】:
-
在将 ios 升级到最新版本后我遇到了同样的问题。你找到解决办法了吗?
-
没有。我想出的唯一解决方案是检查浏览器是否是 ios 中的 safari,而不是关闭窗口。
标签: javascript ios mobile-safari