Javascript 仅打印 iframe 内容

IT技术 javascript jquery printing
2021-01-14 12:24:43

这是我的代码

<script>
var body = "dddddd"    
var script = "<script>window.print();</scr'+'ipt>";

var newWin = $("#printf")[0].contentWindow.document; 
newWin.open();
newWin.close();

$("body",newWin).append(body+script);

</script>
<iframe id="printf"></iframe>

这有效,但它打印父页面,我如何让它只打印 iframe?

6个回答

我不希望那会奏效

试试吧

window.frames["printf"].focus();
window.frames["printf"].print();

并使用

<iframe id="printf" name="printf"></iframe>

或者尝试好老

var newWin = window.frames["printf"];
newWin.document.write('<body onload="window.print()">dddd</body>');
newWin.document.close();

如果 jQuery 无法破解它

现场演示

@Gullbyrd 我和你有同样的问题,这段代码有效:var PDF = document.getElementById('fileframe'); PDF.focus(); PDF.contentWindow.print();来自:sitepoint.com/load-pdf-iframe-call-print
2021-03-13 12:24:43
这在加载带有 pdf 数据的 iframe 时不起作用,因此<iframe src="data:application/pdf;base64,JVBERi0..."></iframe>即使框架甚至没有加载外部 URL 它也会出现 CORS 错误。有谁知道如何解决这个问题?
2021-03-20 12:24:43
截至 2014 年 1 月 22 日,这在 Chrome 中不起作用,无论您是添加 contentWindow 还是调用 window.frames["printf"].print()。它打印整个页面,而不仅仅是框架。
2021-03-23 12:24:43
我正在使用 jQuery,我通过 Dom 对象找到了相同的方法。var iframe = $('#printf')[0]; iframe.contentWindow.focus(); iframe.contentWindow.print();这是否适用于 IE 9 或更低版本?
2021-04-04 12:24:43
我的两个建议,为我工作plungjan.name/SO/testprintiframe.html对XP上使用Chrome 32.0.1700.76米
2021-04-09 12:24:43
document.getElementById("printf").contentWindow.print();

适用同源政策

@HeemanshuBhalla 您的 iframe 未加载到页面中,或者您在 上使用了不正确的 ID document.getElementById在尝试打印之前,请确保您可以获得对 iframe 的有效引用。
2021-04-06 12:24:43

简单的方法(在 ie7+、firefox、Chrome、safari 上测试)就是这个

//id is the  id of the iframe
function printFrame(id) {
            var frm = document.getElementById(id).contentWindow;
            frm.focus();// focus on contentWindow is needed on some ie versions
            frm.print();
            return false;
}
这仅适用于我的 Chrome。我非常确定它会起作用!
2021-03-14 12:24:43

一个替代选项,它可能适合也可能不适合,但如果它是更清洁的:

如果您总是只想从页面打印 iframe,您可以使用单独的“@media print{}”样式表来隐藏除 iframe 之外的所有内容。然后就可以正常打印页面了。

实际上很聪明+1
2021-03-27 12:24:43

你可以使用这个命令:

document.getElementById('iframeid').contentWindow.print();

这个命令与window.print()基本相同,但是由于我们要打印的窗口在iframe中,我们首先需要获取该窗口的一个实例作为javascript对象。

所以,对于那个 iframe,我们首先通过使用它的 id 来获取 iframe,然后它的 contentWindow 返回一个 window(DOM) 对象。所以,我们可以直接在这个对象上使用 window.print() 函数。

您好,欢迎使用 Stackoverflow。请在您的答案中添加一些详细信息或查看此处
2021-03-25 12:24:43
虽然此代码块可能会回答这个问题,但如果您能提供一些解释为什么会这样做,那将是一个更好的答案。
2021-03-27 12:24:43