Ответ 1
Добавьте эти строки после newWin.document.write(divToPrint.innerHTML)
newWin.document.close();
newWin.focus();
newWin.print();
newWin.close();
Затем функция печати будет работать во всех браузерах...
Я делаю что-то вроде этого в javascript для печати раздела моей страницы по щелчку ссылки
function printDiv() {
var divToPrint = document.getElementById('printArea');
var newWin = window.open();
newWin.document.write(divToPrint.innerHTML);
newWin.print();
newWin.close();
}
Он отлично работает в Firefox, но не в IE.
Помог ли кто-нибудь помочь
Добавьте эти строки после newWin.document.write(divToPrint.innerHTML)
newWin.document.close();
newWin.focus();
newWin.print();
newWin.close();
Затем функция печати будет работать во всех браузерах...
function printDiv() {
var divToPrint = document.getElementById('printArea');
newWin= window.open();
newWin.document.write(divToPrint.innerHTML);
newWin.location.reload();
newWin.focus();
newWin.print();
newWin.close();
}
Добавьте newWin.document.close();, например:
function printDiv() {
var divToPrint = document.getElementById('printArea');
var newWin = window.open();
newWin.document.write(divToPrint.innerHTML);
newWin.document.close();
newWin.print();
newWin.close();
}
Это делает IE счастливым. НТН, -Ted
У меня была эта проблема раньше, и решение просто вызвать window.print() в IE, в отличие от вызова print из экземпляра окна:
function printPage(htmlPage)
{
var w = window.open("about:blank");
w.document.write(htmlPage);
if (navigator.appName == 'Microsoft Internet Explorer') window.print();
else w.print();
}
Подождите некоторое время перед закрытием окна!
if (navigator.appName != 'Microsoft Internet Explorer') {
newWin.close();
} else {
window.setTimeout(function() {newWin.close()}, 3000);
}
добавить условие проверки для onload
if (newWinObj.onload) {
newWinObj.onload = function() {
newWinObj.print();
newWinObj.close();
};
}
else {
newWinObj.print();
newWinObj.close();
}
Я не уверен, но я думаю, что это происходит из-за правил безопасности InternetExplorer...
Если вы вызываете функцию типа print(), она запрашивает пользователя вручную, если он хочет разрешить активные скрипты, если он нажимает на желтую полосу и выбирает "Да", появляется диалоговое окно печати. Если вы нажмете "Нет" или просто ничего не делаете, он не выполняет части, которые считаются активными сценариями или другими важными функциями javascript безопасности.
В вашем примере открывается окно, затем вызывается print(), появляется строка подтверждения (ничего не выбрано, на самом деле ничто не может быть выбрано из-за короткого времени), вызывается newWin.close(), окно закрывается.
Вам следует попробовать добавить страницу на доверенные сайты в InternetExplorer или изменить параметры безопасности.
Может существовать способ обработки политик безопасности в самом javascript, но я мало знаю о политиках безопасности InternetExplorer.
Надеюсь, что это поможет
Как правило, мы печатаем печать, это просто открыть новое окно со всем, что нужно отправить на принтер. Затем пользователь фактически нажимает на кнопку "Печать" браузеров.
Это всегда было приемлемым в прошлом, и оно оборачивается ограничениями безопасности, о которых говорит Чилл.
Закройте окно только в том случае, если оно не является IE:
function printDiv() {
var divToPrint = document.getElementById('printArea');
var newWin= window.open();
newWin.document.write(divToPrint.innerHTML);
newWin.print();
if (navigator.appName != 'Microsoft Internet Explorer') newWin.window.close();
}
Мне сказали сделать document.close после document.write, я не вижу, как и почему, но это заставило мой script подождать, пока я не закрою диалоговое окно печати, прежде чем он запустит мое окно.
var printContent = document.getElementbyId('wrapper').innerHTML;
var disp_setting="toolbar=no,location=no,directories=no,menubar=no, scrollbars=no,width=600, height=825, left=100, top=25"
var printWindow = window.open("","",disp_setting);
printWindow.document.write(printContent);
printWindow.document.close();
printWindow.focus();
printWindow.print();
printWindow.close();
Это сработало для меня, оно работает в firefox, т.е. и хром.
var content = "This is a test Message";
var contentHtml = [
'<div><b>',
'TestReport',
'<button style="float:right; margin-right:10px;"',
'id="printButton" onclick="printDocument()">Print</button></div>',
content
].join('');
var printWindow = window.open();
printWindow.document.write('<!DOCTYPE HTML><html><head<title>Reports</title>',
'<script>function printDocument() {',
'window.focus();',
'window.print();',
'window.close();',
'}',
'</script>');
printWindow.document.write("stylesheet link here");
printWindow.document.write('</head><body>');
printWindow.document.write(contentHtml);
printWindow.document.write('</body>');
printWindow.document.write('</html>');
printWindow.document.close();
Для использования Firefox
iframewin.print()
для использования IE
iframedocument.execCommand('print', false, null);
см. также Невозможно распечатать iframe в IE с помощью JavaScript, вместо этого печатает родительскую страницу
Просто добавьте дополнительную информацию. В IE 11, используя только
window.open()
Причины
window.document
будет undefined. Чтобы решить эту проблему, используйте
window.open( null, '_blank' )
Это также будет корректно работать в Chrome, Firefox и Safari.
У меня недостаточно репутации для комментариев, поэтому мне пришлось создать ответ.
<!DOCTYPE html>
<html>
<head id="head">
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" />
<!-- saved from url=(0023)http://www.contoso.com/ -->
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div>
<div>
Do not print
</div>
<div id="printable" style="background-color: pink">
Print this div
</div>
<button onClick="printdiv();">Print Div</button>
</div>
</body>
<script>
function printdiv()
{
var printContents = document.getElementById("printable").innerHTML;
var head = document.getElementById("head").innerHTML;
//var popupWin = window.open('', '_blank');
var popupWin = window.open('print.html', 'blank');
popupWin.document.open();
popupWin.document.write(''+ '<html>'+'<head>'+head+'</head>'+'<body onload="window.print()">' + '<div id="printable">' + printContents + '</div>'+'</body>'+'</html>');
popupWin.document.close();
return false;
};
</script>
</html>
Я также сталкиваюсь с этой проблемой.
Проблема в IE newWin.document.write(divToPrint.innerHTML);
когда мы удаляем эту функцию печати строки в IE, работает. но опять-таки проблема о содержании страницы.
Вы можете открыть страницу, используя window.open, и написать контент на этой странице. то функция печати будет работать в IE. Это альтернативное решение.
Удачи.
@Pratik
function functionname() {
var divToPrint = document.getElementById('divid');
newWin= window.open();
newWin.document.write(divToPrint.innerHTML);
newWin.location.reload();
newWin.focus();
newWin.print();
newWin.close();
}