問題は、新しいコンテンツが印刷されないことです (さらにいくつかの要素)。
ユーザーが印刷リンクをクリックすると、window.print() が呼び出される前にドキュメントに html を追加します。
私は ajax を使用して、印刷する前に本のより多くの章をフェッチします。
コード:
印刷が初期化されました:
var afterPrint = function () {
var timer = setInterval(function () {
afterContentPrint(); // Cleanup html (restore to initial state)
clearInterval(timer);
}, 900);
}
//window.onbeforeprint = beforePrint;
window.onafterprint = afterPrint;
イベント印刷クリック:
$("#print-test").click(function (e) {
e.preventDefault();
beforeContentPrint(); // ajax call for additional content, finishing by calling window.print()
});
関数 beforeContentPrint() 内:
var jqxhr = $.ajax({
type: "GET",
url: bookURL,
success: function(data) {
.....
.....
$(article).each(function () {
parent.append(article);
});
},
complete: function() {
var timer = setInterval(function () {
window.print();
}, 900);
}
}
新しいコンテンツが HTML ドキュメントに視覚的に追加されているため、機能するはずです。ただし、最初のコンテンツ (ajax 呼び出しの前) のみが印刷用に選択されます。
このソリューションは、IE および Firefox (onbeforeprint および onafterprint) 用です。
window.matchMedia('print') を使用すると、このロジックを使用して Chrome で正常に動作するようです。