3

ボタンをクリックすると、コンテンツwindow.print()の印刷にjavascriptを使用しています。print_div

しかし、セキュリティ上の問題から、複数の印刷(Cntrl + Pの使用など)オプションを避けたかったのでprint_div、ユーザーが何度も再印刷できないようにコンテンツをクリアすることを考えていました。

ここに大まかなコード、

document.getElementById("print_div").innerHTML = //Some contents to be printed on paper.
window.print()
document.getElementById("print_div").innerHTML = '' // Clearing old contents to avoid mis-use

しかし、このコードはまったく機能せずprint_div、chromeのように印刷プレビューを作成する前にコンテンツをクリアします(私は推測しましたが、非同期で機能しています)

誰かが私に教えてもらえますか、ここでどこが間違っているのですか?

Chrome: 22.0.1229.92 mコードのテストに使用しています。Chromeのみを使用したいと考えています。

4

6 に答える 6

3

印刷ウィンドウが読み込まれなかったためです。

var showPrintWindow = function (context) {
        var printWindow = window.open('', '');
        var doc = printWindow.document;
        doc.write("<html><head>");
        doc.write("<link href='/css/printReport.css' rel='stylesheet' type='text/css' media='print' />");
        doc.write("</head><body>");
        doc.write(context);
        doc.write("</body></html>");
        doc.close();

        function show() {
          if (doc.readyState === "complete") {
              printWindow.focus();
              printWindow.print();
              printWindow.close();
          } else {
              setTimeout(show, 100);
          }
        };
        show();
    };
于 2015-01-30T20:22:10.223 に答える
2

setTimeoutメソッドを使用して試すことができます。

setTimeout("your code or function etc",mili seconds)

setTimeout("document.getElementById('print_div').innerHTML = ''",5000);
于 2012-10-10T07:11:50.317 に答える
1

print_divで印刷しており、次のステップで同じものをクリアしています。したがって、空で表示されます。印刷データを変数に保存できます。次に、それをprint_divに表示すると、変数をクリアできます。

var print = "";
print += "<p>Something </p><br/>";
print += "<table><tr><td>Something</td><td>Something</td></tr> 
                <tr><td>Something</td><td>Something</td></tr> </table>";
document.getElementById("print_div").innerHTML = print;
print = "";

このようなもの。このjavascriptをボタンonsubmitイベントに設定します。

于 2012-10-10T07:22:15.993 に答える
1

Chromeでの問題と同様の問題があり、印刷プレビューで空白のページが表示されていました。setTimeoutを使用してみましたが、機能しませんでした。うまくいったのはwindow.onloadでした。

<div id="printableArea">
      <h1>Print me</h1>
</div>

<input type="button" onclick="printDiv('printableArea')" value="print a div!" />

javascript:

    function printDiv(divName) {

        var printContents = document.getElementById(divName).innerHTML;
        w = window.open();

        w.document.write(printContents);
        w.document.write('<scr' + 'ipt type="text/javascript">' + 'window.onload = function() { window.print(); window.close(); };' + '</sc' + 'ript>');

        w.document.close(); // necessary for IE >= 10
        w.focus(); // necessary for IE >= 10

        return true;
    }
于 2016-10-06T21:07:47.307 に答える
0

私はsetTimeoutに行きません、それはユーザーがすぐに印刷を確認した場合にのみ機能します。これは盲目的に想定することはできません。

私は次のようなことをします:

var html = "<html><head></head><body>" + $("print_div").html() + "</body></html>";
var newWindow= window.open("", "PrintWindow",  
"width=100,height=50,top=50,left=50,toolbars=no,scrollbars=yes,status=no,resizable=yes");  
newWindow.document.writeln(html);  
newWindow.document.close();  
newWindow.focus();  
newWindow.print();  
newWindow.close(); 

その後、ワイプを実行します

$('print_div').clear();
于 2012-10-10T07:22:29.237 に答える
0
setTimeout(function(){printWindow.document.close();
 printWindow.print();}, 500);

それが動作します

于 2016-03-22T09:01:54.533 に答える