window.print();在 Safari 中不起作用
window.print(); does not work in Safari
当使用 onclick link Safari 时,打印方法在 window 上不起作用。通过放置在按钮上的 onclick 代码在 safari 中打印网页的替代方法是什么?发生的另一个奇怪行为是,当我尝试关闭 window 时,浏览器本机打印对话框就会出现。
使用 window.print()
和 Safari 没问题。抱歉,我无法尝试 Windows OS,但遵循适用于 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>
我在使用 Safari 浏览器(而不是其他任何浏览器)时遇到了类似的问题。
就我而言,中止当前正在进行的所有 API 调用会立即显示本机打印对话框。
我猜想关闭 tab/page 时出现对话框的原因是所有网络请求都被取消了。
以下是如何创建 ajax 请求池的示例(使用 jQuery 时):
Stop all active ajax requests in jQuery
此外,为了使其始终如一地工作,我必须在短超时(100 毫秒)内包装 $.xhrPool.abortAll
函数。
我的点击处理函数(简化)看起来像这样:
function myFunction() {
window.print();
window.setTimeout(function () {
$.xhrPool.abortAll()
}, 100);
}
试试这个解决方案:
try {
// Print for Safari browser
document.execCommand('print', false, null)
} catch {
window.print()
}
如果您 return 将 window.print()
的结果传递给 onclick 处理程序,Safari 将不会显示打印 window。我使用 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()
return 对 onclick 处理程序来说是假的,它取消了任何“弹出窗口”显示。这可能就是为什么上面带有 myFunction()
代码的示例在 onclick="window.print()"
可能不起作用时可能起作用的原因。
当使用 onclick link Safari 时,打印方法在 window 上不起作用。通过放置在按钮上的 onclick 代码在 safari 中打印网页的替代方法是什么?发生的另一个奇怪行为是,当我尝试关闭 window 时,浏览器本机打印对话框就会出现。
使用 window.print()
和 Safari 没问题。抱歉,我无法尝试 Windows OS,但遵循适用于 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>
我在使用 Safari 浏览器(而不是其他任何浏览器)时遇到了类似的问题。 就我而言,中止当前正在进行的所有 API 调用会立即显示本机打印对话框。
我猜想关闭 tab/page 时出现对话框的原因是所有网络请求都被取消了。
以下是如何创建 ajax 请求池的示例(使用 jQuery 时): Stop all active ajax requests in jQuery
此外,为了使其始终如一地工作,我必须在短超时(100 毫秒)内包装 $.xhrPool.abortAll
函数。
我的点击处理函数(简化)看起来像这样:
function myFunction() {
window.print();
window.setTimeout(function () {
$.xhrPool.abortAll()
}, 100);
}
试试这个解决方案:
try {
// Print for Safari browser
document.execCommand('print', false, null)
} catch {
window.print()
}
如果您 return 将 window.print()
的结果传递给 onclick 处理程序,Safari 将不会显示打印 window。我使用 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()
return 对 onclick 处理程序来说是假的,它取消了任何“弹出窗口”显示。这可能就是为什么上面带有 myFunction()
代码的示例在 onclick="window.print()"
可能不起作用时可能起作用的原因。