52

有人可以帮助我通过 Safari/Chrome 中的 javascript 调用打印 IFrame 的内容。

这适用于Firefox:

$('#' + id)[0].focus();
$('#' + id)[0].contentWindow.print();

这在 IE 中有效:

window.frames[id].focus();
window.frames[id].print();

但我无法在 Safari/Chrome 中使用任何东西。

谢谢

安德鲁

4

11 回答 11

49

这是我完整的跨浏览器解决方案:

在 iframe 页面中:

function printPage() { print(); }

在主页

function printIframe(id)
{
    var iframe = document.frames
        ? document.frames[id]
        : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;

    iframe.focus();
    ifWin.printPage();
    return false;
}

更新:自从我遇到这个问题以来,许多人似乎在发布的 IE 版本中遇到了这个问题。我现在没有时间重新调查这个问题,但是,如果你被卡住了,我建议你阅读整个线程中的所有评论!

于 2009-01-23T15:41:02.370 回答
42

在 iframe 中放置一个打印函数并从父级调用它。

框架:

function printMe() {
  window.print()
}

家长:

document.frame1.printMe()
于 2009-01-23T15:18:35.347 回答
33

我使用了 Andrew 的脚本,但在调用 printPage() 函数之前添加了一段。iframe 需要焦点,否则它仍然会在 IE 中打印父框架。

function printIframe(id)
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    iframe.focus();
    ifWin.printPage();
    return false;
}

不过不要感谢我,这是安德鲁写的。我刚刚做了一个调整=P

于 2010-05-26T16:10:45.233 回答
8

除了 Andrew 和 Max 的解决方案之外,在 IE8 中使用 iframe.focus() 会导致打印父框架而不是仅打印子 iframe。更改该行修复了它:

function printIframe(id)
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    ifWin.focus();
    ifWin.printPage();
    return false;
}
于 2011-04-20T15:52:20.817 回答
4

使用 firefoxwindow.frames但也要添加name属性,因为它使用了 firefox 中的 iframe

IE:

window.frames[id]

火狐:

window.frames[name]

<img src="print.gif"  onClick="javascript: window.frames['factura'].focus(); parent['factura'].print();">
<iframe src="factura.html" width="100%" height="400" id="factura" name="factura"></iframe>
于 2010-10-28T15:42:40.780 回答
3

需要注意的一点是,如果您在本地使用 file:/// 进行测试,它将无法在 chrome 上运行,因为 iframe 中的函数将显示为未定义。但是,一旦在 Web 服务器上,它就会工作。

于 2010-12-07T15:22:11.623 回答
3

我必须做一些修改才能在 IE8 中使用(没有用其他 IE 风格测试)

1) document.frames[param] 似乎接受一个数字,而不是 ID

printIframe(0, 'print');

function printIframe(num, id)
{
  var iframe = document.frames ? document.frames[num] : document.getElementById(id);
  var ifWin = iframe.contentWindow || iframe;

  ifWin.focus();
  ifWin.printPage();

  return false;
}

2)我在页面加载时显示了一个打印对话框,并且还有一个指向“单击此处开始打印”的链接(如果它没有自动启动)。为了让它工作,我不得不添加 focus() 调用

<script type="text/javascript">
  $(function(){
    printPage();
  });

  function printPage()
  {
    focus();
    print();
  }
</script>
于 2011-12-07T21:23:48.513 回答
0

您可以使用

parent.frames['id'].print();

在 Chrome 工作!

于 2015-01-21T14:37:23.920 回答
0

你也可以使用

top.iframeName.print();

或者

parent.iframeName.print();
于 2016-02-12T00:08:23.163 回答
0

'framePartsList.contentWindow.print();' 在 IE 11 版本 11.0.43 中不起作用

因此我使用了 framePartsList.contentWindow.document.execCommand('print', false, null);

于 2017-06-22T04:50:55.473 回答
-4

用这个:

window.onload = setTimeout("window.print()", 1000);
于 2010-11-24T15:35:20.867 回答