javascript - 如何在打印之前等待 HTML 文档加载/渲染(纯 JavaScript)

标签 javascript typescript onload dom-events

我正在使用此代码在新的 html 页面上打开并打印图像:

printView(dataUri:string){

  var win = window.open();
  win.document.write( '<img src="' + dataUri + '">');

  win.print();
  win.close();

}

当这样使用并且图像大于几 kB 时,打印预览会打开一个空白页,因为调用打印时不会呈现文档。

我通过在打印之前引入约 200 毫秒延迟的 setTimeout 解决了这个问题(暂时),如下所示:

setTimeout( () => {
     win.print();
     win.close();
}, 200);

这是可行的,但是我知道我应该使用一些 DOM/窗口事件来等待内容加载。但是是哪一个呢?

到目前为止我尝试过的:

win.document.onload = ()=>{
    console.log('event fired'); // never fired
    win.print();
    win.close();
}

win.addEventListener('load', ()=>{
    console.log('event fired'); // never fired
    win.print();
    win.close();
}

我想保留这个 Vanilla JS,所以请不要让我引用 jQuery window.ready。

最佳答案

为您的图片添加 onload 属性

 win.document.write( '<img src="' + dataUri + '" onload="print()">');

中删除 win.print()win.close() printView()

并将它们添加到另一个函数print()

当图像加载完成时,

print() 将被触发。

这次希望它有效

关于javascript - 如何在打印之前等待 HTML 文档加载/渲染(纯 JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45795102/

相关文章:

typescript - <promise void> typescript

javascript - 如何在 javascript 中用字符串中的其他内容替换 <br/> 标签的多个实例?

javascript - 为特定 JS 文件 Hook Javascript Onload

dojo - 如何检查dojo.datagrid加载完成?

javascript - 如何解决canvas html5中的性能滞后问题?

javascript - 通过 jQuery/Ajax 获取 GET URL

class - 在与语言无关的上下文和 typescript 中,环境类是什么?

JavaScript/jQuery : does anybody already created a loading fixed div on top 100%:100% of the page with jquery?

javascript - 如何重置 jQuery mobile 中的下拉菜单

javascript - 如果不尊重即使内在值(value)也是错误的