IE7 не будет отображать изображения в динамически сгенерированном iFrame - PullRequest
1 голос
/ 29 сентября 2010

Чтобы помочь с печатью, я динамически генерирую iFrame, а затем заполняю его некоторым содержимым. Это работает на IE6, IE8, Chrome и Firefox на ПК и Mac. Проблема в том, что по какой-то причине он не работает в IE7.

В IE7 изображения не отображаются; вместо этого они показывают как сломанные изображения. Тот же результат при просмотре. Это странно, потому что, как я уже сказал, он отлично работает в IE6 и IE8.

Есть идеи? Я разместил тупую копию здесь

Вот исходный код (как видно из примера):

<!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 голосов
/ 30 сентября 2010

Так что я не мог понять это.

Я обошел стороной, реализовав другой способ печати. Поскольку я не мог по-настоящему воспользоваться специальной таблицей стилей для печати, я смог внести изменения, чтобы приспособиться. Обычно, когда пользователь нажимает кнопку «печать», JavaScript проверяет, какой это браузер. Если это IE7, он следует по специальному пути. Если это что-то еще, он использует метод iframe.

Специальный путь IE7, по сути, включает внесение изменений в страницу в реальном времени, вызов print, а затем отмена изменений. Я попробовал это изначально, но обнаружил, что это работает только в IE. IE сделал бы снимок страницы для печати в момент вызова print. Однако Firefox и Chrome делали снимок, когда вы нажимали OK, чтобы напечатать, поэтому все возвраты, которые вы сделали, произошли до того, как печать произошла.

Короче говоря, это был мой обходной путь. Не слишком красиво, но оно выполняет свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...