Kam*_*eri 20 javascript printing google-chrome
我知道之前已经讨论过了,但是我没有找到实际的解决方案/解决方法,我希望有人知道如何解决这个问题!
这是:
如果您尝试window.print()在google Chrome中在一个页面内频繁调用方法(就像用户点击打印按钮一样),浏览器会在控制台中抛出一条警告消息,说明:
忽略过于频繁的print()调用
没有任何反应!几秒钟后,事情恢复正常,window.print()再次调用命令时会出现打印对话框!更糟糕的是,优秀的Chrome用户使用指数等待时间来调用打印命令的页面,这意味着用户点击打印按钮的次数越多,他就越需要等待打印对话框出现!
这个问题已经在chrome中使用了相当长的时间(14个后续版本),并且它被确认为一个Area-UI错误,我昨天再次为Google团队发布了这个问题,希望Chrome团队的某个人能够验证这个令人难以置信的烦人功能何时会被修复!
但是,我在这里寻找的是这个问题的解决方法,有什么我可以做的能够使这个工作吗?我的公司正在开发一个高度交易的金融系统,其中包含大量需要打印的报告,对于这个小故障,整个项目都有可能在我最喜欢的谷歌Chrome浏览器中运行!
更新:
以下是Chrome浏览器中导致此功能的代码,看起来在有人再次调用print命令之前需要至少2秒,因此UI中2秒间隔的计时器可能会阻止进入无限等待回调!还有其他想法吗?
aps*_*ers 19
您可以有条件地替换该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;
}
}
})();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用内部安全计时器/包装器,而不是使用外部安全计时器/包装器.只需添加此项并window.print在Chrome中安全行事,通常在其他任何地方.(另外,关闭意味着realPrintFunc,interval并且nextAvailableTime是新的window.print
如果需要协调window.print多个框架页面之间的调用,可以nextAvailableTime在父页面中设置,而不是在闭包中设置,以便所有框架都可以使用访问共享值window.parent.nextAvailableTime.
| 归档时间: |
|
| 查看次数: |
10685 次 |
| 最近记录: |