将JavaScript和HTML添加到IFRAME,并将IFRAME打印到打印机

时间:2014-01-09 17:23:20

标签: javascript jquery iframe

有多个帖子涉及这些主题的一部分,但没有一个将它们组合在一起。

在给定的页面上,我希望创建一个新的IFRAME,添加一些JavaScript,将页面打印到打印机,然后添加一些HTML将打印出来。

以下是我在http://jsbin.com/UDUCADI/2/进行现场演示的尝试。它打印,但打印父页而不是IFRAME。

如何打印IFRAME?

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Print IFRAME</title>
        <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script> 
        <script type="text/javascript">
            $(function () {
                $('#printIt').click(function(){
                    var iframe   = $('<iframe>');
                    var script   = document.createElement("script");
                    script.type  = "text/javascript";
                    script.text  = "window.print()";
                    iframe[0].appendChild(script);
                    iframe.appendTo('body');
                    var iframeDocument=$(iframe[0].contentWindow.document);
                    iframeDocument.find('body').html($('#stuffToPrint').html());
                })
            });
        </script>
    </head>
    <body>
        <button id="printIt">Print</button>
        <div id="stuffToPrint">
            <p>Print this text!</p>
            <img alt="And print this image" src="dropdown_arrow_blue.gif">
        </div>
        <div>Don't print this!</div>
    </body>
</html>

1 个答案:

答案 0 :(得分:2)

<强> EDITED

实际上有一些错误。其中一个是你混合jQuery和DOM api。第二种方法是将脚本标记添加到iframe的主体,然后再次设置主体的HTML,覆盖脚本标记。第三:你使用的是script.text,它应该是script.innerHTML。

$(function () {
$('#printIt').click(function(){
    var iframe   = document.createElement('iframe');
    document.body.appendChild(iframe)
    iframe.contentWindow.document.body.innerHTML = $('#stuffToPrint').html();
    var script   = document.createElement("script");
    script.innerHTML  = "window.print()";
    iframe.contentWindow.document.body.appendChild(script);
})
});

工作版本位于:http://jsbin.com/UDUCADI/5/