Скачать 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, время: 06:45. |