我想打开一个新窗口/标签,把文档中的某些HTML,然后打开浏览器打印对话框来打印新的窗口。 我使用以下来实现:
var w = window.open();
w.document.write(html);
w.document.close();
当html
包含:
...<body onload="window.print()">...</body>...
这一切工作,窗口弹出,并显示新页的打印对话框,但是,出于某种原因,浏览器是不是等待所有图像在页面上显示的打印对话框之前加载。 这是造成一些图像不打印。
有许多图像,并且它们是在服务器端动态地生成的(时间约1秒每加载)。 如何强制浏览器一旦所有的图像加载仅打印?
这发生在Chrome和Firefox,我已经证实。 我感谢所有帮助。
尝试把您的打印机呼叫onload事件的最后一张图像。
<img onload="window.print()" ... />
编辑:
由OP完整的答案所看到如下:
我想出了使用@ chockleyc的回答为灵感下面的脚本。 我不能只用最后的图像,因为他们不必为了加载。 下面的脚本将打印页面的所有图像都加载后(使用jQuery的):
var hasPrinted = false;
$(document).ready(function(){
$('img').load(function(){
var imgs = $('img');
var loadedAll=true;
for(var i=0;i<imgs.length;i++){
loadedAll &= $(imgs[i])[0].complete;
}
if (loadedAll && !hasPrinted) {
console.log('printing');
hasPrinted = true;
window.print();
}
else {
console.log('not all images have loaded');
}
})
});
尝试从改变它body.onload
事件将window.onload
事件。
w.window.onload = window.print()
或类似的东西。