使window.print等待窗口加载

时间:2019-07-28 09:40:35

标签: javascript html

我需要打印使用JavaScript和HTML动态创建的页面。我的问题是,有时它显示空白页。我认为这是因为尚未加载“窗口”。如何打印直到窗口加载完毕?

我尝试添加方法wait(),但问题是相同的。 这是打印页面的方法:

function printpage(){ 
    var panel;

    panel =document.getElementById("cajaticket").innerHTML;
    var mywindow = window.open('', 'Print');
    mywindow.document.write('<html><head><link rel="stylesheet" href="css/extras/ticket.css"></head><body>');
    mywindow.document.write(panel);
    mywindow.document.write('</body></html>');
    mywindow.document.close();
    mywindow.focus();
    mywindow.print();
    mywindow.close();
    panel=null;
}

它应该总是打印窗口,但是目前,它仅在某些时候可以工作。

2 个答案:

答案 0 :(得分:1)

如果整个页面都已加载,则可以调用printpage()函数。

$(window).bind("load", function() { // code here });

答案 1 :(得分:1)

如果您需要jQuery来帮助您解决此问题,请尝试以下操作:

$($(window).on('load', function() {
        printpage();
    });
);
function printpage(){ 
    var panel;

    panel =document.getElementById("cajaticket").innerHTML;
    var mywindow = window.open('', 'Print');
    mywindow.document.write('<html><head><link rel="stylesheet" href="css/extras/ticket.css"></head><body>');
    mywindow.document.write(panel);
    mywindow.document.write('</body></html>');
    mywindow.focus();
    mywindow.print();
    mywindow.close();
    panel=null;
}

这将确保DOM在打印之前已加载,准备好并呈现。

更新:使用

$(mywindow).on('load', function() { 
    // manipulate mywindow here
});

很好,但是文档中没有明确说明支持该功能:

  

load 事件在元素和所有子元素都已完全加载时发送到元素。此事件可以发送到与 URL 相关的任何元素:图像,脚本,框架,iframe和window对象。

请参阅完整的文档here