У меня есть в основном проблема, противоположная этому вопросу: Как предотвратить загрузку iframe при вводе в DOM? Я хочу загрузить элемент IFRAME
, который не вводится в DOM.
Я пытаюсь распечатать страницу с помощью JavaScript.Цель состоит в том, чтобы избежать необходимости переходить по ссылке, вводить команду печати и возвращаться обратно.
У меня есть jQuery, доступный мне.
// fake table that illustrates pertanent DOM
<table class=diary><tr><td data-job=12345 contextmenu=job_menu><a href=/jobs/12345>view job 12345</a></table>
// real code
<menu type="context" id="job_menu">
<menuitem label="Print Job" onclick="PrintJob(); return false;"></menuitem>
</menu>
<script type="text/javascript">
var target = null;
function PrintJob()
{
var job_no = $(target).data('job');
if(job_no > 0) {
$('<iframe name="printjob" src="/jobs/'+job_no+'">').load(function () {
this.focus();
this.print();
})
.trigger('load');
}
}
$('.diary').bind('contextmenu', function (ev) {
var td = ev.target;
while(td && td.nodeName != 'TD')
td = td.parentNode;
target = td;
});
</script>
Проблема заключается в том, что вызов .trigger('load')
для сгенерированного элемента IFRAME
не вызывает запрос GET
для URL-адреса атрибута src
.Я надеялся, что сначала будет вызван обработчик по умолчанию, затем мой подключенный обработчик сработает и напечатает содержимое iframe, но мой обработчик загрузки просто вызывается немедленно.
Я не могу прикрепить вызов print ксобытие iframe contentDocument.onready
, поскольку contentDocument
равно нулю до тех пор, пока не будет загружен кадр.Я не знаю, можете ли вы сфокусировать элемент не в DOM или это необходимо для печати, но код, который я видел в другом месте, имел .focus()
, предшествующий .print()
(я также пытался использовать window.frames['printjob'].print()
, но яподозреваемый window.frames['printjob']
равен нулю, если iframe еще не находится в окне:)