gpt4 book ai didi

JavaScript 打印被 Chrome 阻止,解决方法?

转载 作者:行者123 更新时间:2023-12-02 16:25:59 24 4
gpt4 key购买 nike

我知道之前已经在这里讨论过,但我没有找到实际的解决方案/解决方法,我希望有人知道如何解决这个问题!

这是:

如果您尝试在 Google Chrome 中的单个页面中频繁调用 window.print() 方法(就像用户单击打印按钮一样),浏览器会在控制台中抛出警告消息,指出:

Ignoring too frequent calls to print()

什么也没发生!几秒钟后,一切恢复正常,并在您再次调用 window.print() 命令时出现打印对话框!更糟糕的是,优秀的 Chrome 用户对调用打印命令的页面使用指数等待时间,这意味着用户单击打印按钮的次数越多,他必须等待打印对话框出现的时间就越长!

此问题在 Chrome 中已经存在相当长一段时间了(14 个后续版本),并且已确认Area-UI bug,我 posted it again for google team昨天希望 Chrome 团队的人员能够验证一下这个令人难以置信的恼人功能何时会得到修复!

但是,我在这里寻找的是解决此问题的方法,我可以采取什么措施来解决这个问题吗?我的公司正在开发一个高度交易性的财务系统,其中有大量需要打印的报告,仅仅因为这个小故障,整个项目就有在我最喜欢的谷歌 Chrome 浏览器中运行的风险!

更新:

Here's the code in Chrome browser这会导致此功能,并且看起来在有人再次调用 print 命令之前至少需要 2 秒,因此 UI 中 2 秒间隔的计时器可能会阻止进入无限等待回调!还有其他想法吗?

最佳答案

您可以有条件地替换 window.print() 函数:

// detect if browser is Chrome
if(navigator.userAgent.toLowerCase().indexOf("chrome") > -1) {
// wrap private vars in a closure
(function() {
var realPrintFunc = window.print;
var interval = 2500; // 2.5 secs
var nextAvailableTime = +new Date(); // when we can safely print again

// overwrite window.print function
window.print = function() {
var now = +new Date();
// if the next available time is in the past, print now
if(now > nextAvailableTime) {
realPrintFunc();
nextAvailableTime = now + interval;
} else {
// print when next available
setTimeout(realPrintFunc, nextAvailableTime - now);
nextAvailableTime += interval;
}
}
})();
}

您可以使用内部安全定时器/包装器,而不是使用外部安全定时器/包装器。只需添加此内容,window.print 就可以在 Chrome 中安全地运行,并且通常在其他地方也可以安全运行。 (另外,闭包意味着 realPrintFuncintervalnextAvailableTime 对于新的 window.print 是私有(private)的

如果您需要协调多个框架页面之间对 window.print 的调用,您可以在父页面而不是闭包中设置 nextAvailableTime ,以便所有框架可以使用 window.parent.nextAvailableTime 访问共享值。

关于JavaScript 打印被 Chrome 阻止,解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com