web-dev-qa-db-ja.com

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では機能しません。

誰か助けてください

62
Pankaj

newWin.document.write(divToPrint.innerHTML)の後にこれらの行を追加します

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

その後、印刷機能はすべてのブラウザで動作します...

131
Pratik

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

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

私は以前にこの問題を抱えていましたが、解決策は、ウィンドウインスタンスからprintを呼び出すのではなく、IEでwindow.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
Kyle

オンロードのチェック条件を追加します

if (newWinObj.onload) {
    newWinObj.onload = function() {
        newWinObj.print();
        newWinObj.close();
    };
}
else {
    newWinObj.print();
    newWinObj.close();
}
3
Derin
<!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>
3
Luyao Chang

いくつかの追加情報を追加するだけです。 In IE 11、単に使用

window.open() 

原因

window.document

未定義になります。これを解決するには、次を使用します

window.open( null, '_blank' )

これは、Chrome、Firefox、Safariでも正常に機能します。

私はコメントするのに十分な評判がないので、答えを作成しなければなりませんでした。

3
Clinton Chau

しばらく待ってからウィンドウを閉じてください!

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

通常、印刷を処理する方法は、プリンターに送信する必要があるすべてのものを含む新しいウィンドウを開くことです。次に、ユーザーに実際にブラウザの[印刷]ボタンをクリックさせます。

これは過去において常に容認されており、Chillnが話しているセキュリティ制限を回避します。

2
NotMe

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

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();
}
2
kiatng

これは私のために働いた、それは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();
2

Firefoxの使用

iframewin.print()

for IE use

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

iframeを印刷できないIE JavaScriptを使用して、代わりに親ページを印刷する

2

よくわかりませんが、InternetExplorerのセキュリティルールが原因で発生すると思います...

Print()などの関数を呼び出すと、アクティブなスクリプトを許可するかどうかをユーザーに手動で尋ね、黄色のバーをクリックして「はい」を選択すると、印刷ダイアログが表示されます。 「いいえ」をクリックするか、何もしないと、アクティブスクリプトまたはその他のセキュリティ関連のJavaScript関数と見なされる部分は実行されません。

あなたの例では、ウィンドウが開いてからprint()が呼び出され、確認バーがポップアップします(何も選択されておらず、実際には短時間のために何も選択できません)、newWin.close()が呼び出され、ウィンドウが閉じます。

InternetExplorerで信頼済みサイトにページを追加するか、セキュリティ設定を変更してください。

JavaScript自体でセキュリティポリシーを処理する方法があるかもしれませんが、InternetExplorerセキュリティポリシーについてはあまり知りません。

お役に立てれば

2
Chilln

私もこの問題に直面しています。

IE is newWin.document.write(divToPrint.innerHTML);の問題

IEは機能しています。ただし、ページのコンテンツに関する問題がまだ存在しています。

Window.openを使用してページを開き、そのページにコンテンツを書き込むことができます。 IEで印刷機能が動作します。これは代替ソリューションです。

幸運。

しゅう

1
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();
}
0
Venki WAR