【发布时间】:2018-01-29 09:50:28
【问题描述】:
我正在使用此代码在新的 html 页面上打开和打印图像:
printView(dataUri:string){
var win = window.open();
win.document.write( '<img src="' + dataUri + '">');
win.print();
win.close();
}
当这样使用并且图像大于几 kB 时,打印预览会打开一个空白页面,因为调用打印时不会呈现文档。
我通过引入setTimeout(在打印前延迟约 200 毫秒)解决了这个问题,如下所示:
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。
【问题讨论】:
-
“等待 HTML 文档加载”是什么意思?一旦你执行 window.open(),就会创建一个新文档并自动加载,因为它最初是空的
-
我相信你的 win.document.onload 事件没有被触发,因为你在 window.open() 之后定义它们,当你绑定事件处理程序时,事件已经被调用
-
您的主要问题是您希望页面仅在特定条件后加载!在您在此问题中指定的示例中,您只有 1 个条件,即(加载图像后加载)
-
考虑到这些事实,我们可以得出结论,没有 DOM 方法或事件处理程序可以帮助您!
-
我可以建议您一个解决方案,但由于您的加载实际上不是文档的加载,因此您必须在每次更改或添加加载后应该准备好的内容时更新它!
标签: javascript typescript onload dom-events