Window.print() не работает в IE

Я делаю что-то вроде этого в javascript для печати раздела моей страницы по щелчку ссылки

function printDiv() {
 var divToPrint = document.getElementById('printArea');
 var newWin = window.open();
 newWin.document.write(divToPrint.innerHTML);
 newWin.print();
 newWin.close();
}

Он отлично работает в Firefox, но не в IE.

Помог ли кто-нибудь помочь

Ответ 1

Добавьте эти строки после newWin.document.write(divToPrint.innerHTML)

newWin.document.close();
newWin.focus();
newWin.print();
newWin.close();

Затем функция печати будет работать во всех браузерах...

Ответ 2

function printDiv() {
    var divToPrint = document.getElementById('printArea');
    newWin= window.open();
    newWin.document.write(divToPrint.innerHTML);
    newWin.location.reload();
    newWin.focus();
    newWin.print();
    newWin.close();
}

Ответ 3

Добавьте 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

Ответ 4

У меня была эта проблема раньше, и решение просто вызвать 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();
    }

Ответ 5

Подождите некоторое время перед закрытием окна!

if (navigator.appName != 'Microsoft Internet Explorer') {
    newWin.close();
} else {
    window.setTimeout(function() {newWin.close()}, 3000);
}

Ответ 6

добавить условие проверки для onload

if (newWinObj.onload) {
    newWinObj.onload = function() {
        newWinObj.print();
        newWinObj.close();
    };
}
else {
    newWinObj.print();
    newWinObj.close();
}

Ответ 7

Я не уверен, но я думаю, что это происходит из-за правил безопасности InternetExplorer...

Если вы вызываете функцию типа print(), она запрашивает пользователя вручную, если он хочет разрешить активные скрипты, если он нажимает на желтую полосу и выбирает "Да", появляется диалоговое окно печати. Если вы нажмете "Нет" или просто ничего не делаете, он не выполняет части, которые считаются активными сценариями или другими важными функциями javascript безопасности.

В вашем примере открывается окно, затем вызывается print(), появляется строка подтверждения (ничего не выбрано, на самом деле ничто не может быть выбрано из-за короткого времени), вызывается newWin.close(), окно закрывается.

Вам следует попробовать добавить страницу на доверенные сайты в InternetExplorer или изменить параметры безопасности.

Может существовать способ обработки политик безопасности в самом javascript, но я мало знаю о политиках безопасности InternetExplorer.

Надеюсь, что это поможет

Ответ 8

Как правило, мы печатаем печать, это просто открыть новое окно со всем, что нужно отправить на принтер. Затем пользователь фактически нажимает на кнопку "Печать" браузеров.

Это всегда было приемлемым в прошлом, и оно оборачивается ограничениями безопасности, о которых говорит Чилл.

Ответ 9

Закройте окно только в том случае, если оно не является 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();
}

Ответ 10

Мне сказали сделать 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();

Ответ 11

Это сработало для меня, оно работает в 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();

Ответ 13

Просто добавьте дополнительную информацию. В IE 11, используя только

window.open() 

Причины

window.document

будет undefined. Чтобы решить эту проблему, используйте

window.open( null, '_blank' )

Это также будет корректно работать в Chrome, Firefox и Safari.

У меня недостаточно репутации для комментариев, поэтому мне пришлось создать ответ.

Ответ 14

<!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>

Ответ 15

Я также сталкиваюсь с этой проблемой.

Проблема в IE   newWin.document.write(divToPrint.innerHTML);

когда мы удаляем эту функцию печати строки в IE, работает. но опять-таки проблема о содержании страницы.

Вы можете открыть страницу, используя window.open, и написать контент на этой странице. то функция печати будет работать в IE. Это альтернативное решение.

Удачи.

@Pratik

Ответ 16

function functionname() {

    var divToPrint = document.getElementById('divid');
    newWin= window.open();
    newWin.document.write(divToPrint.innerHTML);
    newWin.location.reload();
    newWin.focus();
    newWin.print();
    newWin.close();
}