在JavaScript中丢失的图像打印弹出(Print popup in JavaScript mi

2019-10-18 08:50发布

我想打开一个新窗口/标签,把文档中的某些HTML,然后打开浏览器打印对话框来打印新的窗口。 我使用以下来实现:

var w = window.open();
w.document.write(html);
w.document.close();

html包含:

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

这一切工作,窗口弹出,并显示新页的打印对话框,但是,出于某种原因,浏览器是不是等待所有图像在页面上显示的打印对话框之前加载。 这是造成一些图像不打印。

有许多图像,并且它们是在服务器端动态地生成的(时间约1秒每加载)。 如何强制浏览器一旦所有的图像加载仅打印?

这发生在Chrome和Firefox,我已经证实。 我感谢所有帮助。

Answer 1:

尝试把您的打印机呼叫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');
    }
  })
});


Answer 2:

尝试从改变它body.onload事件将window.onload事件。

w.window.onload = window.print()

或类似的东西。



文章来源: Print popup in JavaScript missing images