IE上的iframe.print与window.print - 前者的小字体

时间:2011-11-08 19:20:20

标签: internet-explorer iframe printing

在我们的网络应用程序中,我们为几个页面提供了打印功能,我们采用的方法是将当前页面的内容放在全局可用的iframe文档中并打印iframe(使用Javascript)。这在Firefox中完全正常,但在IE中它以非常小的字体打印iframe,几乎不可读。

在两个浏览器中应用的所有CSS都是相同的,我确保打印的HTML不会以任何方式溢出(使IE适合内容或其他东西)......而且IE打印仍然非常小。有趣的是,如果我将打印逻辑更改为写入新窗口然后执行window.print(),那么IE中的一切工作正常,并且字体与CSS要求/指定的一样大。

IE中的iframe.print()有没有遇到过类似的问题?

感谢您的帮助。

尼丁

5 个答案:

答案 0 :(得分:4)

我在解决同样的问题后找到了这个帖子。看起来这种行为即使在IE11中仍然存在。好消息是我能够找到一个解决方案而无需打开一个新窗口然后调用window.print()

诀窍是在IE中使用document.execCommand(一直到IE11),然后在其他浏览器中优雅地回到iframe.print()。完整的解决方案看起来像这样(使用jQuery选择iframe,但这完全是可选的):

var target = $('iframe')[0];
try {
    target.contentWindow.document.execCommand('print', false, null);
} catch(e) {
    target.contentWindow.print();
}

这个解决方案的灵感来自于一个关于IE7的旧线程:http://bytes.com/topic/misc/answers/629926-ie7-printing-iframe-solution。不过,它仍然具有相关性。

答案 1 :(得分:3)

今天在IE上出现了小问题,为了解决这个问题,我只是调整了我的打印功能:

$(document).ready(function(){
$("#printFrame").click(function(){    
    if (document.queryCommandSupported('print')) 
    {
        $("#iframe").get(0).contentWindow.document.execCommand('print', false, null);
    } 
    else 
    {
        $("#iframe").get(0).contentWindow.focus();
        $("#iframe").get(0).contentWindow.print();
    }
  });
});

现在它似乎在IE,Chrome和Firefox上打印出相同的内容。发布在这里是因为这个解决方案对我来说很难找到,所以希望这会对某人有所帮助。

答案 2 :(得分:1)

是的,我们看到了同样的事情。如果我们直接打开同一页面,它会按照您的预期打印。当它在iframe中加载并打印时,它会使一切变小;不只是字体。

这是在Windows 7上使用IE9。

答案 3 :(得分:0)

我采用的最终解决方案是使用window.print()而不是iframe.print()。

答案 4 :(得分:0)

As" Heston Liebowitz"写道,使用" execCommand"是一个好主意和解决方案。但我会为IE设置if条件,因为这个问题只出现在IE的情况下。以下是我的建议:

// Get the iframe element
var oIFrame = $('#iF_Print').get(0);
// Fix for IE : Allow it to render the iframe
oIFrame.focus();

var bMS_IE = false;
// Verify whether the browser is Internet Explorer (IE8,IE9,IE10 -> "msie", but for IE11 the name is changed into "trident").
var userAgent = window.navigator.userAgent.toLowerCase();
bMS_IE = ( (userAgent.indexOf('msie ') > -1) || (userAgent.indexOf("trident/") > -1) )?true:false;

if ( bMS_IE ) {
        try {
            oIFrame.document.execCommand('print', false, null);
        }catch(e) {
            window.print();
        }
}else {
    oIFrame.print();
}