从父窗口打印动态创建的iframe的内容

cer*_*key 17 printing iframe jquery

我有一个页面,其中包含一个链接列表和一个div,作为链接所引导页面的占位符.每次用户点击链接时,都会在div中创建iframe,并且其src属性会获取链接href属性的值 - 简单明了,类似于外部网页库.我有什么问题是打印iframe的内容.为此,我使用此代码:

function PrintIframe()  
{  
frames["name"].focus();  
frames["name"].print();  
}

问题似乎是iframe是由JQuery动态创建的 - 当我将iframe插入到html代码中时,浏览器会打印外部页面.但是用JavaScript注入相同的代码没有任何反应.我试图在"打印"链接上使用JQ 1.3'live'事件,但没有成功.有办法克服这个问题吗?

Far*_*uti 33

假设这是你的iframe看起来像:

<iframe id='print-iframe' name='print-frame-name'></iframe>
Run Code Online (Sandbox Code Playgroud)

这是你使用jQuery的方法:

$("#print-iframe").get(0).contentWindow.print();
Run Code Online (Sandbox Code Playgroud)

这就是你使用原生JavaScript的方式:

document.getElementById("print-iframe").contentWindow.print();
Run Code Online (Sandbox Code Playgroud)


Yur*_*uri 9

我在打印iframe的内容时遇到了问题.为了实现此目的,请使用以下代码:

例如,你有iframe:

<iframe id='print-iframe' name='print-iframe'></iframe>
Run Code Online (Sandbox Code Playgroud)

然后js打印iframe的内容调用此函数(在ie和其他浏览器中都有效):

printIframe('print-iframe');
Run Code Online (Sandbox Code Playgroud)

功能代码:

function printIframe(iFrameId) {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf ("MSIE ");
    var iframe = document.getElementById(printFrameId);

    if (msie !== 0) {
        iframe.contentWindow.document.execCommand('print', false, null);
    } else {
        iframe.contentWindow.print();
    }
}
Run Code Online (Sandbox Code Playgroud)


Tem*_*ple 8

我尝试了这个并且能够复制这个问题.我注意到的是,在调用print函数时iframe没有完成加载.我通过在调用PrintIFrame()时检查innerHTML的值来测试它.要解决此问题,您可以使用setTimeOut在x毫秒后再次调用该函数:

function PrintIframe() { 

        if (window.frames['myname'].innerHTML != "") {
            window.frames['myname'].focus();
            window.frames['myname'].print();
        } else {
            setTimeout(PrintIframe,1000);
        }    
    }
Run Code Online (Sandbox Code Playgroud)

这对我有用

编辑 奇怪 - 我的测试代码中有一个警报,似乎使它工作.当我把它拿出来时,它没有用.对不起:(

无论如何,这应该使用jQuery将加载事件处理程序附加到iframe.我已经在IE8上测试了它的工作原理:

<html>
<head>
    <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
    function loadiFrame(src)
    {
        $("#iframeplaceholder").html("<iframe id='myiframe' name='myname' src='" + src + "' />");
    }

    $(function()
    {
        $("#printbutton").bind("click", 
            function() { 
                loadiFrame('test.aspx'); 
                $("#myiframe").load( 
                    function() {
                        window.frames['myname'].focus();
                        window.frames['myname'].print();
                    }
                 );
            }
        );
    });
    </script>    
</head>
<body>
    <input type="button" id="printbutton" value="Load iFrame" />
    <div id="iframeplaceholder"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)