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