在Opera和Chrome打印iframe中的内容(Print iframe content in

2019-09-02 12:41发布

我想打印iframe中的内容。

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

此代码在IE,Firefox和Safari。 但是,不要在Chrome和Opera的工作。 这些浏览器打印整个页面。

我试图用这个话题如何打印一个IFrame从Safari /铬的JavaScript 。 但它并没有帮助我。

可能有人帮助我吗?

Answer 1:

这是在Opera一个已知的bug。 除了寻求解决方法上面的想法,你可能想的是这样玩:

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

我没有测试过这一点,但它应该在弹出窗口中创建的页面的副本,并打印出来,而不必从服务器加载内容的第二次或失去你可能想打印任何DOM修改。



Answer 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();
}

还添加以下代码到主体的端部时(当打印== 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>


Answer 3:

我不能使用Chrome重现您的问题。 歌剧,但是,确实还试图只打印了iframe打印时整个外页。

我设计了一个解决方法,虽然它的工作主要是,它不是100%,故障安全(因为歌剧包装印刷线除其他外,我不知道如何计算在这种情况下,正确的高度)。 这就是说,下面的代码工作至少是合理的(使用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();
}

希望这可以帮助。



Answer 4:

我想上面的代码,并在更改上面的代码后,我带着确凿的代码如下

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()}

试试这个



文章来源: Print iframe content in Opera and Chrome