私はここを見回して、新しいウィンドウをインスタンス化し、そこにマークアップを移植することによって、javascriptを使用してdivのコンテンツを印刷する方法の素晴らしい解決策を見てきました。
SharePointでのそのソリューションに関する私の問題は、SP。*。jsライブラリが非同期に読み込まれ、印刷ダイアログ画面またはブラウザー自体がフリーズすることです。
誰かがこの問題を回避することができましたか?
3 に答える
SharePointを使用ExecuteOrDelayUntilScriptLoaded
すると、SP.jsが読み込まれるまで待機して、フリーズするものがないことを確認できます。
<script type="text/javascript">
function printPage(){
}
window.onload = function(){ ExecuteOrDelayUntilScriptLoaded(printPage, "sp.js"); };
</script>
以下に示すコードは、SharePoint、ASPXページ、および任意のブラウザーで機能します。Sharepoint 2010 Visual Webパーツを使用してコードをテストしましたが、それは魅力のように機能します。
このJavascriptコードをWebパーツASCXファイル内に配置します
<script type="text/javascript">
function printPartOfPage(elementId) {
var printContent = document.getElementById(elementId);
var windowUrl = '';
var uniqueName = new Date();
var windowName = 'Print' ;
var printWindow = window.open(windowUrl, windowName, 'left=-20,top=-20,width=0,height=0');
printWindow.document.write('<HTML><Head><Title></Title>');
printWindow.document.write('</Head><Body style="margin-left:50px;margin-top:50px;font-size:10pt;">');
printWindow.document.write(printContent.innerHTML);
printWindow.document.write('</Body></HTML>');
printWindow.document.close();
printWindow.focus();
printWindow.print();
printWindow.close();
}
</script>
&印刷ボタンClientClickイベントを更新します
<img alt="" src="~/_layouts/images/WebpartCollection/Printer-30X30.jpg"
onclick="JavaScript:printPartOfPage('YourDivClientID');" />
これがお役に立てば幸いです。
私はSharePointを具体的に知らないので、具体的な例を示すことはできません。ただし、この他のスタックオーバーフローの質問で概説されているような手法を考えているようです。
これはすべて、順次実行される1ブロックのコードであることに注意してください。そこで、ウィンドウを開き、マークアップを設定して、すぐに印刷します。それらのステップの間に待つ必要はありません。
その時点でprintを呼び出さずに、ウィンドウを開いてマークアップを設定し、新しいウィンドウのマークアップにさらにJavaScriptを挿入することをお勧めします。この新しく挿入されたJavaScriptは、実際の印刷が行われる場所になります。
その挿入されたスクリプトには、特定のスクリプトリソースの読み込みが完了するまで待機し、その後でを呼び出すロジックが必要window.print()
です。どうやらwindow.onload
、すべてのリソースの読み込みが完了するまで起動しません。(onloadは、すべてのコンテンツがロードされるか、ロードに失敗するまで起動しません)。これがstackoverflowのjqueryの例です。また、スクリプトはマークアップに表示される順序で実行されます。したがって、挿入された印刷ウィンドウのjavascriptが最後の場合、それより上の他のすべてのスクリプトはすでに実行されている必要があります。(したがって、SharePointがマークアップに挿入するものはすべてすでに実行されているはずです)。
ボーナスポイントとして、すべてが順調に進んでいる場合は、新しい印刷ウィンドウに「読み込みマスク」を挿入し、JavaScriptが実行する直前にマスクを非表示にすることができますwindow.print()
。