新しいウィンドウでテーブルを印刷しようとしています。 問題は、ページがレンダリングされる前にprint
が印刷しようとしていることです。 私はdocument.write
が非同期であると思われます。 document.write()
の代わりにdocument.outerHTML
/document.innerHTML
を使用しようとしましたが、CSS/JSファイルがCSSとして正しく解析されていません。 テーブルには、window.print()
の後にもキャッシュからロードされているセル内のイメージがあります。window.print()は、レンダリングが完了する前にページを動的に作成しようとします。
ご迷惑をおかけして申し訳ございません。
function printData() {
let newWin = window.open("");
styles="";
//read styles in different page
Array.prototype.forEach.call(
document.querySelectorAll("link, style"),
function(el){
styles += (el.outerHTML);
});
//DOESNT WORK NOT RENDER STYLES
// newWin.document.document.querySelector("html").innerHTML=(styles + document.querySelector("table").outerHTML);
//THIS FINISHES RENDERING AFTER PRINT
newWin.document.write(styles + document.querySelector("table").outerHTML);
//DOESNT WORK
newWin.document.addEventListener("DOMContentLoaded", function(){
if(newWin.document.addEventListener === "loading"){
newWin.print();
}
//DOESNT WORK
newWin.window.onload= function(){
newWin.print();
}
//WORKS
setTimeout(function(){
newWin.print();
newWin.close();
}, 2000);
});
}
ここではエキゾチックなものがあります:すべての画像にonload関数を付けます。まず、トリガーイメージの属性「完了」を「true」に設定します。次に、完了していないすべての画像を選択します:$( 'img [done!= "true"]')。長さが0の場合、印刷します。 – Nate
まだ画像をすべて削除しようとしました。 – partizanos