Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   открыть в новом окне и отправить на печать (https://javascript.ru/forum/misc/54302-otkryt-v-novom-okne-i-otpravit-na-pechat.html)

kristow 12.03.2015 17:34

открыть в новом окне и отправить на печать
 
Всем привет.
У меня работал js скрипт на странице, который выводит на печать страницу. Так вот после обновления браузера (хром), заметил что при выводе на печать стиль style_print.css не применяется. А если отменить печать и не закрыть окно печати, то стили прогружаются сами...:-E

Вот мой код вывода на печать:
$("#print_tab").click(function() {
	    var new_wnd = window.open(location.href+"?tmpl=component&print=1&layout=default&page=", "subWindow", "status,menubar,height=700,width=700,scrollbars=yes");
        var new_content = '<html><head><title>123</title><meta http-equiv="content-type" content="text/html; charset=utf-8" />'; 
		css_path = "<?php echo JURI::base().'css/style_print.css'; ?>"
		new_content += '<script type="text\/javascript">function ImportStyleFile () {'
        new_content +=    'var linkTag = document.createElement ("link");'
        new_content +=    'linkTag.href = "'+ css_path +'";'
        new_content +=    'linkTag.rel = "stylesheet";'
        new_content +=    'var head = document.getElementsByTagName ("head")[0];'
        new_content +=    'head.appendChild (linkTag);'
        new_content += '}<\/script>';
		new_content += '</head><body onload="ImportStyleFile()">';
		new_content += $("#main_tab").html();
		new_content += '</body><html>';
		new_wnd.document.write(new_content);
		new_wnd.document.close();
		new_wnd.print();
	  });

Поэтому я хочу обойти этот глюк. При нажатии кнопки на печать, чтоб открывалась страница в новом окне со стилем style_print.css, и когда она догрузилась, вызывать команду браузера выбора принтера...:write:

ник 12.03.2015 18:44

добрый вечер помогите пож решить
подсчитать сумму чисел кратных 5 и произведение положительных чисел вводимых с клавиатуры. ввод чисел должен быть завершен при наборе числа 0

danik.js 12.03.2015 20:20

kristow, зачем ты подключаешь таким странным образом? Почему просто не прописать через тег <link> прямо в разметке?

Пояснение: тег <link> блокирует дальнейшую обработку документа до тех пор пока не стиль не подгрузится и не применится. Соотв-но к моменту исполнения скрипта все будет уже готово.
Если же стиль добавлять через appendChild, то стиль будет подгружаться асинхронно, и скорее всего не успеет подгрузиться.

Помимо этого, print() надо наверное разместить внутри html кода, чтобы он не выполнился раньше загрузки стиля.

kristow 27.10.2016 09:04

Вложений: 1
Спасибо за ответы.
Сделал вот так:
$("#print_tab").click(function() {
		
	    var new_wnd = window.open(location.href+"?tmpl=component&print=1&layout=default&page=", "subWindow", "status,menubar,height=800,width=800,toolbar=1,scrollbars=yes");
        var new_content = '<html><head><title>Мой сайт</title><meta http-equiv="content-type" content="text/html; charset=utf-8" />';
		new_content += '<link rel="stylesheet" type="text/css" href="css/style_print2.css?<?php echo rand()*10000; ?>" /></head><body>'
		new_content += '<img src="img/sp.png" class="leftimg">';
		new_content += $("#main").html();
		new_content += '</body><html>';
		new_wnd.document.write(new_content);

		new_wnd.document.close();
		new_wnd.focus();
		setTimeout(function() {
			new_wnd.print();
			new_wnd.close();
		}, 100);
	  });

Вроде как и стиль прогружается... Но вот возник другой вопрос...
Как программно включить в настройках печати браузеров: "Верхние и нижние колонтитулы" и "Фон"?
Если включаю эти настройки руками, то все отлично, и при печати выводятся колонтитулы и фон в таблице который нужен.
Но открываю на другом ПК, и вижу что эти же настройки выключены.

Подскажите как можно программно задать автоматическое включение этих настроек в браузере при печати с моего сайта?


Часовой пояс GMT +3, время: 06:47.