2

herehereから派生したこのコードを使用しています。

$('#my_button').on('click', function (e) {
    var iframe = document.createElement('iframe');
    iframe.id = "my_iframe";
    iframe.onload = function() {
        var doc = iframe.contentDocument || iframe.contentWindow.document;
        doc.getElementsByTagName('body')[0].innerHTML = "<p>test123</p>";

        iframe.contentWindow.focus(); 
        iframe.contentWindow.print();

        $("#my_iframe", top.document).remove();
    };

    document.getElementsByTagName('body')[0].appendChild(iframe);
});

線がなくてremoveもきれいに印刷されます。ただし、この行はを実行する前に をremove削除します。iframe を印刷してから削除するように、ある種のコールバックを設定するにはどうすればよいですか?iframeprint()

ありがとう。

4

2 に答える 2

5

印刷イベントの検出を検索していたときに、この解決策を見つけました。

http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

ここでは、Stano の要求に従って JS コードを追加しますが、このアプローチには制限があるため、リンクされた投稿全体を読むことも重要です。一般的に、投稿は IE でのみ機能する onafterprint イベントと、そのイベントを他のブラウザーで機能させるためのソリューションに関するものです。

(function() {
    var beforePrint = function() {
        console.log('Functionality to run before printing.');
    };
    var afterPrint = function() {
        console.log('Functionality to run after printing');
    };

    if (window.matchMedia) {
        var mediaQueryList = window.matchMedia('print');
        mediaQueryList.addListener(function(mql) {
            if (mql.matches) {
                beforePrint();
            } else {
                afterPrint();
            }
        });
    }

    window.onbeforeprint = beforePrint;
    window.onafterprint = afterPrint;
}());
于 2012-08-15T08:38:47.583 に答える
2

次のような関数を作成します。

function printIframe(iframe,callback) {
  iframe.contentWindow.print();
  if (callback && typeof(callback) === "function") {
    // execute the callback, passing parameters as necessary
    callback();
  }
}

このように他の2つの関数の代わりに呼び出します。printIframe(iframe,function(){ $("#my_iframe", top.document).remove();})

必要に応じて、setTimeout を使用して遅延を設定することもできます。

setTimeout(function() {alert('hello');},1250);
于 2012-08-15T08:43:08.770 に答える