2015-08-07 2 views
0

Я работаю над приложением MVC C#, в котором содержимое div состоит из вызова AJAX, который извлекает поля базы данных и возвращается как сообщение об успешности JavaScript. Строка (тривиальный пример):Печать Div с изображениями

"<div style='background:yellow'>asdf<img src='myfile.jpg'></div>" 

затем печатается:

function printDivContents(contents) { 
    var printContents = contents; 
    var originalContents = document.body.innerHTML; 
    document.body.innerHTML = "<div style='margin:10px'>" + printContents + "</div>"; 
    window.print(); 
    document.body.innerHTML = originalContents; 
} 

Everything принтами отлично в большинстве случаев, но есть изображение там что печатает тогда и только тогда, когда это было загружен ранее. Я бы хотел, чтобы он всегда печатал. Я попытался добавить скрипт предварительной загрузки в строку содержимого. Я могу использовать только чистый JavaScript, а не jQuery, и весь CSS должен быть встроенным. Каковы мои возможности для загрузки изображения? Должен ли я приостановить выполнение, чтобы дождаться загрузки DOM, назначьте изображение в качестве скрытого фона div на вызывающей странице или ...?

+1

Даст ли ответ AJAX вам содержание строка полностью? Лучше ожидать ответ JSON, и если объект «image» будет найден, вы сможете создать новый узел «img» и загрузить изображение с помощью «img.src =» myfile.jpg ». Дайте мне знать, если что-то не имеет смысла. – Tyler

+0

@Tyler, да, AJAX дает полную строку содержимого. В то время как разделение проблем создало бы создание DOM в представлении, было бы существенным проектом переместить код с серверной стороны на JavaScript. После написания моего вопроса я попытался добавить изображение в скрытый div на вызывающей странице, и он отлично работает ... единственная проблема заключается в том, что изображение теперь жестко закодировано и поэтому не может быть изменено динамически. Я все еще работаю над этой частью. Этот вопрос решен (скрытый фон div), но я буду держать его на месте, если у кого-то еще будет такая же проблема. Спасибо – Wes

+0

Спасибо за понимание @Wes. В конечном итоге я получаю возможность анализировать атрибут src и устанавливать его программно. Настройка этого способа (после загрузки) должна правильно отображать изображение. Обычно я стараюсь избегать использования background: url(), но любое ленивое загруженное скрытое изображение также может работать. – Tyler

ответ

0

На странице, которая делает первоначальный вызов AJAX, создать скрытый DIV так:

<div style="display:none; background:url('myfile.jpg')"></div> 

Если файл динамически изменяется, изменить цвет фона на DIV перед печатью.

0

Если вы хотите по-прежнему иметь возможность изменить изображение динамически, у меня было очень схожие проблемы и обнаружил, что ждет изображения для загрузки работало достаточно хорошо:

var image = Image(); 
image.onload(function() { 
    //print the screen, or do whatever 
}); 
image.src = "whateverImgSrc"; 
Смежные вопросы