Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中缺少图像的打印弹出窗口_Javascript_Html_Browser_Printing_Cross Browser - Fatal编程技术网

JavaScript中缺少图像的打印弹出窗口

JavaScript中缺少图像的打印弹出窗口,javascript,html,browser,printing,cross-browser,Javascript,Html,Browser,Printing,Cross Browser,我想打开一个新窗口/选项卡,在文档中添加一些HTML,然后打开浏览器打印对话框来打印新窗口。我使用以下方法来实现这一点: var w = window.open(); w.document.write(html); w.document.close(); 其中html包含: ...<body onload="window.print()">...</body>... 。。。。。。。。。 这一切都可以正常工作,弹出窗口,并显示新页面的“打印”对话框。但是,出于某种原因

我想打开一个新窗口/选项卡,在文档中添加一些HTML,然后打开浏览器打印对话框来打印新窗口。我使用以下方法来实现这一点:

var w = window.open();
w.document.write(html);
w.document.close();
其中
html
包含:

...<body onload="window.print()">...</body>...
。。。。。。。。。
这一切都可以正常工作,弹出窗口,并显示新页面的“打印”对话框。但是,出于某种原因,浏览器在显示“打印”对话框之前,不会等待页面上的所有图像加载。这导致一些图像无法打印

有许多映像,它们是在服务器端动态生成的(每个映像的加载大约需要1秒)。如何强制浏览器仅在加载所有图像后打印


这发生在我已经确认的Chrome和Firefox中。非常感谢您的帮助。

尝试将其从
body.onload
事件更改为
window.onload
事件

w.window.onload=window.print()


或者类似的事情。

尝试将打印机调用放入最后一张图像的onload事件中

<img onload="window.print()" ... />

编辑:

OP的完整答案如下所示:

我以@chockleyc的答案为灵感,设计了以下脚本。我不能只使用最后一张图片,因为它们不一定按顺序加载。以下脚本将在加载所有图像后打印页面(使用jQuery):

var haspritted=false;
$(文档).ready(函数(){
$('img').load(函数(){
var-imgs=$('img');
var loadedAll=真;

对于(var i=0;iI确实尝试过将
window.onload=window.print;
放在页面上,虽然它确实打印了,但我还是遇到了图像丢失的问题。经过一些研究,似乎
我明天早上会试试。谢谢你的帮助!我用你的答案作为灵感,并想出了一个可行的解决方案。我不认为是这样但是,只在最后一张图片中添加它会起作用,因为图片不一定按顺序加载。谢谢!我很感谢你接受我的答案,但因为其他人知道你使用了什么解决方案?如果你在评论中发布它,我会更新我的答案,将其包含在编辑中,以便其他人可以看到。它在我的答案中。如果你更新您的答案,这将是伟大的。谢谢
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');
    }
  })
});