IE7不会在动态生成的iFrame中显示图像

时间:2010-09-29 12:59:13

标签: image iframe printing internet-explorer-7

为了帮助打印,我正在动态生成iFrame,然后用一些内容填充它。这适用于PC和Mac上的IE6,IE8,Chrome和Firefox。问题是由于某些原因它在IE7上无法正常工作。

在IE7中,图像不显示;相反,他们显示为破碎的图像。查看时的结果相同。这很奇怪,因为就像我说的,它在IE6和IE8中运行良好。

有什么想法吗?我发布了一个愚蠢的副本here

这是源代码(如示例所示):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> 
<title>iframe print test</title> 
<script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
function printIFrameFunc(id)
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    iframe.focus();
    ifWin.print();
    return false;
}

function printfra() {
    $("iframe#printIFrame").remove();
    // Create an iframe which will be populated with the data to be printed...
    $('body').append('<iframe id="printIFrame"></iframe>');
    // !!! This next line commented so the iframe will be visible on the screen 
    //$("iframe#printIFrame").attr('style','position:absolute;left:-500px;top:-500px;');

    // Don't do anything on the iframe until it's ready to go
    if ($.browser.webkit)
        $("iframe#printIFrame").ready(iframeloadedprint);
    else
        $("iframe#printIFrame").load(iframeloadedprint);

    function iframeloadedprint() {        
        var printBody = $("iframe#printIFrame").contents().find('body');
        printBody.html( $("#mainContainer").html() );
        printIFrameFunc('printIFrame');
    }
    return false;
}
</script> 
</head> 

<body> 
      <div id="mainContainer"> 
        <img src="dash.png" alt="test image" /> 
        <a href="#" onclick="printfra();">Click here to print</a> 
    </div> 
</body> 

非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

所以我无法理解这一点。

我通过实施不同的打印方式做了一些工作。由于我无法真正利用特殊样式表进行打印,因此我能够进行更改以适应。基本上当用户点击“打印”按钮时,javascript会测试它是什么浏览器。如果它是IE7,它遵循一条特殊的路径。如果是其他任何内容,则使用iframe方法。

IE7特殊路径主要涉及对页面进行一系列更改,调用print,然后撤消更改。我最初尝试过这个,但发现它只能在IE中使用。在调用print时,IE会拍摄页面的快照以进行打印。但是,当您单击“确定”进行打印时,Firefox和Chrome会拍摄快照,因此您所做的所有还原都会在打印实际发生之前进行。

长话短说,这是我的解决方法。不太漂亮,但它完成了工作。