如何在Safari/Chrome中从javascript打印IFrame

And*_*ock 50 javascript printing iframe webkit

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

这适用于Firefox:

$('#' + id)[0].focus();
$('#' + id)[0].contentWindow.print();
Run Code Online (Sandbox Code Playgroud)

这适用于IE:

window.frames[id].focus();
window.frames[id].print();
Run Code Online (Sandbox Code Playgroud)

但我无法在Safari/Chrome中使用任何功能.

谢谢

安德鲁

And*_*ock 48

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

在iframe页面中:

function printPage() { print(); }
Run Code Online (Sandbox Code Playgroud)

在主页面中

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

    iframe.focus();
    ifWin.printPage();
    return false;
}
Run Code Online (Sandbox Code Playgroud)

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

  • @AndrewBullock对于那些即使在使用你的脚本时仍然面临问题的人,我可以建议你添加一个注释来检查doctypes和html标题.我的父和iframe页面都使用html5boilerplate(所以html5和顶部的一些条件)和IE拒绝打印iframe(它总是打印父级)当我将任一页面更改为xhtml并删除条件,然后iframe没有父母正确打印.为什么哦为什么总是只有IE导致这样的头痛!! :)如果人们发现你的脚本不起作用,可能会有一个指向这个区域的指针. (5认同)
  • 咩血腥!! (4认同)

Dio*_*ane 42

将打印功能放在iframe中并从父级调用它.

IFRAME:

function printMe() {
  window.print()
}
Run Code Online (Sandbox Code Playgroud)

父:

document.frame1.printMe()
Run Code Online (Sandbox Code Playgroud)

  • 你是如何让document.frame1工作的?我不得不使用它:document.getElementById('frame1').contentWindow.printMe() (7认同)
  • 使用NAME属性,而不是ID. (2认同)
  • 它在IE8中不起作用.它正在打印所有内容(也在iframe之外).任何想法请... (2认同)

M.W*_*ker 32

我使用了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;
}
Run Code Online (Sandbox Code Playgroud)

不要感谢我,是安德鲁写的.我刚做了一个tweak = P.

  • 这可以在android等移动设备上使用吗?谢谢。 (2认同)

ser*_*dar 8

除了Andrew和Max的解决方案之外,使用iframe.focus()导致打印父框架而不是在IE8中仅打印子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;
}
Run Code Online (Sandbox Code Playgroud)