在IE浏览器中打印隐藏的iFrame

8

这个解决方案在Firefox 3.0+中运行良好,但IE8/7只会打印整个页面,而不是特定的iframe。

当点击打印链接时,将调用以下函数:

var printfunc= function(){
  var url = http://someurl.aspx;
  //This iFrame has style="visibility: hidden; position: absolute; left: -9000px;"
  var printIFrame = GetObj('PrintIFrame');
  printIFrame.src = url;
}

被加载到隐藏iframe中的aspx在onload事件处理程序上调用打印函数:

<body onload="PrintJS.Print();">

打印功能:
Print函数:
 this.Print = function(){
      self.focus();
      self.print();
      return false;
 }

我也尝试过使用“window”而非“self”。这两种方法在Firefox中都可以正常工作,但IE似乎无法正确处理作用域。有什么想法吗?跨浏览器的解决方案将是很好的选择!另外,我更愿意使用CSS打印样式,但我要打印的内容与页面上的内容不同,因此需要将HTML加载到隐藏的iframe中。


1
这是打印到一个没有人知道的秘密打印机吗?(抱歉,忍不住开个玩笑:)) - KristoferA
3个回答

20

解决方案:在IE浏览器中,带有visibility: hidden;样式的iframe会导致浏览器打印其父元素。将样式更改为height: 0px; width: 0px;可解决此问题。


如果我们使用 display: none; 而不是 visibility: hidden; 会怎样呢?在这种情况下,我们不需要设置高度和宽度。 - Debiprasad
我也遇到了display:none;的同样问题,但是如果我将高度和宽度设置为0,然后切换显示,执行.focus()后跟随.print(),然后再次切换显示,就可以正常工作。 - gattsbr

2

父文档:

<!doctype html>
<html>
    <head>
        <script> 
        function printIframe(iframe_id) { 

            if (navigator.appName.toUpperCase() == 'MICROSOFT INTERNET EXPLORER') { 
                document.frames[iframe_id].focus(); 
                document.frames[iframe_id].print(); 
            } else { 
                window.frames[iframe_id].focus(); 
                window.frames[iframe_id].print(); 
            } 
        } 
        </script> 
    </head>
    <body>
        <a href="javascript:printIframe('printMe');">Print the iframe.</a> 
        <iframe id="printMe" src="iframe.html"></iframe>
    </body>
</html>

iframe文档:

<!doctype html>
<html>
    <head></head>
    <body>
        <p>Print this.</p>
    </body>
</html>

以下链接中提到:

http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=449 该链接无法翻译,因为它是一个指向网站的超链接。

欺骗攻击并非只限于2013年。 - Codebeat
你能在这里包含答案的主要思想吗?仅提供链接的答案是不被鼓励的。 - Thomas

0
尝试使用document.parentWindow.print();而不是self.print()...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接