在动态创建的iframe(不是dom)中加载页面并打印它

时间:2014-07-02 14:09:25

标签: javascript html dom iframe

我尝试在javascript中创建打印功能,它会创建一个iframe,设置源并等待dom准备好打印iframe的内容,但它无法正常工作。

这是我的功能:

app.addReportPrintButtons = function (parentElement) {
    var parent = parentElement || "body";

    $(parent).on("click", ".print-report", function (e) {
        var url = $(this).attr('href');

        var iframe = document.createElement("IFRAME");
        iframe.setAttribute("src", url);
        iframe.onload = function (e) {
            var win = iframe.contentWindow || iframe;
            win.focus();
            win.print();
        };

        e.preventDefault();
    });
};

我可以在动态创建的iframe中打印页面吗?或者iframe是否需要附加到DOM?

1 个答案:

答案 0 :(得分:0)

Javascript无法直接打印。它只能触发浏览器的打印功能。因此,如果您的元素不在DOM中,则无法打印。在上面的代码中,iframe不会打印,因为它在插入DOM之前不会在技术上加载。

我建议使用CSS隐藏iframe:

iframe {
    display: none;
}

将它放在常规屏幕样式表中。然后在打印样式表中显示iframe:

iframe {
    display: block;
}