2016-10-06 11 views
0

私はこのJavaScriptコードは、それがポップアップウィンドウにいくつかのコンテンツを置き、それを印刷しようとすると接続があります。待ち()

$(".print_friendly_popup").click(function() { 
    var target = $(this).data('print-target'); 
    var left = (screen.width/2)-(500/2); 
    var top = (screen.height/2)-(500/2); 
    var win = window.open("", "test", "width=500,height=500 top=" + top + ", left=" + left); 

    if(target == 'review') { 
     win.document.write($('#print_friendly_review').html()); 
    } else if(target == 'essay') { 
     win.document.write($('#print_friendly_essay').html()); 
    } 
    win.print(); 
    win.close(); 
}); 

問題が時々ありますwin.document.writeの呼び出しに時間がかかり、ウィンドウが空白の画面を印刷しようとします。印刷を開始する前にwindow.documentが書き込まれるのを待つ方法はありますか?

+0

'setTimeout()'を試しましたか? –

+0

1. "document.write"はあまり "ベストプラクティス"ではありません。単純なHTMLに変更したり、適切な要素に文字列としてHTMLを割り当てたりするのは、 "onLoad" "イベントですべてのコンテンツが読み込まれ、"印刷 "されます 2.私はCSSメディアを使って"印刷スタイル "を設定できるメソッドに行きます:" @media print " –

+0

ドキュメントの使用に問題はないポップアップウィンドウのコンテンツを作成するための.write – JJJ

答えて

0

それでは、どのようにこのことについて試してみてください。例えば、ウィンドウはそれのコンテンツを持っているかどうかを確認するために、「チェッカー」のいくつかの並べ替えを作成する:あなたがしている

var checkForContent = function() { 
    setTimeout(function() { 
    var content = win.document.querySelector('body').innerHTML 

    if (content.length) { 
     win.print() 
     win.close() 
    } else { 
     checkForContent() 
    } 
    }, 200) 
} 

この方法印刷前にコンテンツがレンダリングされるのを丁寧に待っています。

0

win.onload = function(e){ 
    //..... your codes 
}