Скачать 2х генерируемых файла одновременно
Здравствуйте!
Необходимо, чтобы по нажатию одной кнопки в браузере данные формы передавались 2м разным скриптам, которые по результатам работы отдают 2 файла (*.rtf,*.pdf). Собственно, особо не раздумывая, просто повесил <div class=\"button\" align=\"center\" onclick=\"print_accept_orders();\">Печать накладной</div>
function print_accept_orders() //Печатаем накладную на приемку заказов .rtf
{
document.accept_orders_form.action = "php/print_rtf.php";
document.accept_orders_form.submit();
print_pdf_notes();
}
function print_pdf_notes() //генерируем .pdf
{
document.accept_orders_form.action = "php/print_pdf.php";
document.accept_orders_form.submit();
}
Как результат, в Firefox,IE10,Edge - работает в Crome,Opera - нет. Выполняется только print_cdek_notes(), а первый файл сбрасывается. Подскажите, пожалуйста, как пофиксить? |
Строго говоря, то что где-то работает - это неправильно: после submit ничего работать не должно, т.к. страница меняется.
Самое простое - перенаправить в отдельное окно:
function print_accept_orders(){
var form = document.accept_orders_form;
form.action = "php/print_rtf.php";
form.target = "print_rtf";
form.submit();
form.action = "php/print_pdf.php";
form.target = "print_pdf";
form.submit();
}
|
К сожалению, тоже самое.
Загружается только второй файл. В вашем примере - pdf Если поменять местами
function print_accept_orders(){
var form = document.accept_orders_form;
form.action = "php/print_pdf.php";
form.target = "print_pdf";
form.submit();
form.action = "php/print_rtf.php";
form.target = "print_rtf";
form.submit();
}
то .rtf |
Понятно. Это тупая защита от спама рекламными окнами, больше одного в n секунд хром не откроет.
Решение зависит от того что должны выдавать эти ваши принт страницы. Например если сразу запрос на печать\сохранение, можно добавить скрытые фреймы в которые и отправлять результат: <iframe name='print_pdf'></iframe> <iframe name='print_rtf'></iframe> Если же нет - только эксперимент или гугл.) |
function buildElement(tagName, props) {
var element = document.createElement(tagName);
for (var propName in props) element[propName] = props[propName];
return element;
}
function submit(link, props, callback) {
var iframe = buildElement('iframe'),
iframeDoc = iframe.contentDocument || iframe.contentWindow.document,
form = buildElement('form', {
method: 'post',
action: link
});
for (var propName in props) form.appendChild(
buildElement('input', {
type: 'hidden',
name: propName,
value: props[propName]
})
);
iframe.style.display = 'none';
document.body.appendChild(iframe);
iframeDoc.body.appendChild(form);
form.submit();
if (typeof callback === "function") {
iframe.onload = function() {
callback((this.contentDocument || this.contentWindow.document).body.innerHTML);
document.body.removeChild(iframe);
};
} else {
document.body.removeChild(iframe);
}
}
btn.onclick = function() {
submit('php/print_pdf.php', {
target: 'print_pdf'
});
submit('php/print_rtf.php', {
target: 'print_rtf'
});
};
сам не пробовал, но походу должно работать |
Цитата:
<iframe name='print_pdf'></iframe> <iframe name='print_rtf'></iframe> |
| Часовой пояс GMT +3, время: 02:38. |