【发布时间】:2011-12-03 00:41:21
【问题描述】:
我有一个按钮,可以将打印报告加载到 div 内的“不可见”iframe 中并打印该 iframe;用户按下一个按钮来打印报告(包含在不同的页面上),而无需更改页面或除打印对话框之外的任何视觉中断。它适用于 Chrome 和 Firefox,但不适用于 IE。在 IE 中,父页面被完整打印,并且在页面底部(我正在加载 iframe)插入一个小小的混乱 iframe。
这是没有内容的空 div,它就在那里,所以我有一个带有 ID 标记的地方,可以用 Javascript 设置样式和粘贴内容:
<div id="printerDiv"></div>
这是javascript函数,我的按钮的onClick这个函数会触发并将我的打印页面插入到printerDiv内的iframe中,加载此页面后它会打印:
function printPage(url) {
var div = document.getElementById("printerDiv");
div.innerHTML = '<iframe src="'+url+'" onload=this.contentWindow.print();>
</iframe>';
}
这是隐藏 div 的 CSS。我正在使用绝对定位将其移出可见的屏幕区域。我曾经使用 display:none,但 Firefox 无法打印这种样式的 iframe:
#printerDiv{
position:absolute;
left:-9999px;
}
当我在 IE 中打印时,它会打印整页,然后在底部,#printerDiv 所在的位置,我得到这个小 iframe:
所以内容正在加载,但它不只是打印 iframe,也没有正确隐藏 iframe。我插入到#printerDiv 的任何其他内容都被正确隐藏,只有 iframe 会这样显示。
我已经在我的 Javascript 函数中尝试了this question 中的所有解决方案:使用self.print,使用document.parentWindow.print,将printerDiv 上的样式更改为0px 高度/宽度也不起作用。
欢迎使用不使用 iframe 的解决方案(IE 似乎存在大量问题),但我需要这种能力来加载屏幕上不可见的内容并通过按钮直接打印。
【问题讨论】:
-
你试过使用@media rules of css吗?
-
@Einacio 我是,我曾经在我的屏幕 CSS 中使用
display:none,在我的打印 CSS 中使用display:block,它在 Firefox 中不起作用。我不知道它是否在IE中也有效。 -
您可以尝试从
window.frames数组中选择框架,而不是使用this,这可能是在ie 中引用window -
@Einacio 刚刚做到了,Chrome 和 FF 只按应有的方式打印报告框架,IE 现在只打印父窗口和父窗口,它甚至没有显示带有报告的 iframe。
-
你测试的是哪个 IE 版本?
标签: javascript internet-explorer iframe cross-browser