6

我正在尝试打印 iframe 内容。

contentWindow.focus();
contentWindow.print();

此代码适用于 IE、Firefox 和 Safari。但不要在 Chrome 和 Opera 中工作。这些浏览器打印整个页面。

我尝试使用这个主题How do I print an IFrame from javascript in Safari/Chrome。但这对我没有帮助。

有人可以帮助我吗?

4

4 回答 4

5

这是 Opera 中的一个已知错误。除了上述解决方法的想法之外,您可能还想玩这样的东西:

    var clone=document.documentElement.cloneNode(true)
    var win=window.open('about:blank');
    win.document.replaceChild(clone, win.document.documentElement);
    win.print();

我没有对此进行测试,但它应该在弹出窗口中创建页面的副本并打印它,而不必从服务器再次加载内容或丢失您可能想要打印的任何 DOM 修改。

于 2009-12-03T13:08:06.000 回答
2

据我了解,不打开新窗口就不可能实现 iframe 打印。

我的打印功能:

if ($.browser.opera || (/chrome/.test(navigator.userAgent.toLowerCase()))) {
  var href = contentWindow.location.href;
  href = href.indexOf("?") > -1 ? href + "&print=1" : href + "?print=1";
  var printWindow = window.open(href, "printWindow", "scrollbars=yes");
  printWindow.focus();
}
else {
  contentWindow.focus();
  contentWindow.print();
}

我还在正文的末尾添加了以下代码(当 print==1 时):

<script type='text/javascript'>
  function invokePrint() {
    if (document.readyState && document.readyState!='complete')
      setTimeout(function() { invokePrint(); }, 50);
    else if (document.body && document.body.innerHTML=='false')
      setTimeout(function() { invokePrint(); }, 50);
    else {
      focus();
      print();
    }
  }
  invokePrint();
</script>
于 2009-11-02T05:22:17.660 回答
1

我无法用 Chrome 重现您的问题。然而,Opera 在尝试仅打印 iframe 时确实仍然打印整个外部页面。

我设计了一种解决方法,尽管它确实可以正常工作,但它并不是 100% 的故障安全(其中包括因为 Opera 会为打印换行;我不知道在这种情况下如何计算正确的高度)。也就是说,以下代码至少是合理的(为方便起见,使用 jQuery):

if ($.browser.opera) {
    var ifr     = $('#youriframe');
    var ifrbody = ifr.get(0).contentDocument.body;
    var sheet   = $([
        '<style type="text/css" media="print">',
        'body * {',
        ' display: none;',
        '}',
        '#youriframe {',
        ' border: none;',
        ' display: block;',
        ' height: ', ifrbody.scrollHeight, 'px;',
        ' margin: 0px;',
        ' padding: 0px;',
        ' width: ', ifrbody.scrollWidth, 'px;',
        '}',
        '<\/style>'
    ].join(''));
    $('head').append(sheet);
    window.print();
    sheet.remove();
}

希望这可以帮助。

于 2009-11-02T18:12:58.180 回答
0

我尝试了上面的代码,在对上面的代码进行了更改后,我得到了如下的结论性代码

var win=window.open('about:blank');
win.document.write('<html><head></head><body>'); 
win.document.write('<iframe frameBorder="0" align="center" src="'+window.location.href+'" onload="test()" style="width: 619px; height: 482px;"></iframe>'); 
win.document.write('<scr'+'ipt>function test(){window.focus();window.print()}</sc'+'ript></body></html>'); 
win.document.close(); 
if (window.focus) {win.focus()}

试试这个

于 2012-04-19T10:46:31.797 回答