window.print()在IE中不起作用

时间:2010-03-31 18:59:43

标签: javascript internet-explorer printing

我在javascript中做了类似的事情,点击链接打印我页面的一部分

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

它适用于Firefox,但不适用于IE。

有人可以帮忙吗

16 个答案:

答案 0 :(得分:129)

newWin.document.write(divToPrint.innerHTML)

之后添加这些行
newWin.document.close();
newWin.focus();
newWin.print();
newWin.close();

然后打印功能将在所有浏览器中运行...

答案 1 :(得分:10)

添加 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很开心。 HTH, -Ted

答案 2 :(得分:8)

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 :(得分:4)

之前我遇到过这个问题,解决方案就是在IE中调用window.print(),而不是从窗口实例调用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();
    }

答案 4 :(得分:3)

在关闭窗口前等一段时间!

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

答案 5 :(得分:3)

为onload添加检查条件

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

答案 6 :(得分:3)

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

答案 7 :(得分:2)

我不确定,但我认为这是因为InternetExplorer的安全规则......

如果你调用像print()这样的函数,它会手动询问用户是否要允许活动脚本,如果他点击黄色栏并选择“是”,则会出现打印对话框。如果单击“否”或者不执行任何操作,则不执行被视为活动脚本或其他安全相关javascript函数的部分。

在你的例子中,窗口打开然后调用print(),弹出确认栏(没有选择,实际上由于时间短而无法选择),调用newWin.close(),窗口关闭。

您应该尝试将该页面添加到InternetExplorer中的受信任站点或更改安全设置。

可能有一种方法可以在javascript本身中处理安全策略,但我对InternetExplorer安全策略知之甚少。

希望这有帮助

答案 8 :(得分:2)

我们通常处理打印的方式是打开新窗口,其中包含需要发送到打印机的所有内容。然后我们让用户实际点击他们的浏览器打印按钮。

这在过去一直是可以接受的,它避开了Chilln所说的安全限制。

答案 9 :(得分:2)

仅当窗口不是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 :(得分:2)

我被告知在document.write之后做document.close,我看不出怎么回事,但是这导致我的脚本等到我关闭打印对话框之后才运行window.close。

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 :(得分:2)

这适用于我,它适用于firefox,即chrome。

    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();

答案 12 :(得分:2)

对于Firefox使用

iframewin.print()

用于IE使用

iframedocument.execCommand('print', false, null);

另见Unable to print an iframe on IE using JavaScript, prints parent page instead

答案 13 :(得分:2)

只是添加一些额外的信息。在IE 11中,仅使用

window.open() 

原因

window.document

未定义。要解决此问题,请使用

window.open( null, '_blank' )

这也适用于Chrome,Firefox和Safari。

我没有足够的声誉来评论,所以不得不创建一个答案。

答案 14 :(得分:1)

我也面临这个问题。

IE中的问题是     newWin.document.write(divToPrint.innerHTML);

当我们在IE中删除此行打印功能正在工作。但是关于页面内容的问题仍然存在。

您可以使用window.open打开页面,并在该页面中编写内容。然后打印功能将在IE中工作。这是替代解决方案。

祝你好运。

@Pratik

答案 15 :(得分:0)

activity_main.xml