jQuery Modal Box 内のサイトにポップアップするドキュメントがあります。ドキュメントの最後には、ポップアップ ボックス内のドキュメントを印刷するだけの印刷ボタンがあります。
Ctrl+P を使用して、iframe 内でのみドキュメントを印刷したかったのです。そのためには、背景を含むすべてのページを印刷するというデフォルトの動作を防ぐ必要がありました。
これは、印刷用の jQuery コードです。
$(document).keydown(function(event) {
if ( ( (event.ctrlKey == true) || (event.metaKey == true) ) && (event.which == '80')) {
event.preventDefault();
printAssessment();
}
});
function printAssessment() {
if ($('#frameContainer').length) {
$('#lightboxFrame')[0].contentWindow.print();
}
}
iframe を含む私のページの HTML は次のとおりです。
<div id="frameContainer">
<iframe id="lightboxFrame" width="950px" scrolling="auto" height="500px">
<!DOCTYPE html>
<html>
<head>
<body> (Whole Document in a Div) </body>
...
さて、問題は、モーダルボックスを開いて Ctrl+P を押すと、モーダルをスクロールしないと希望どおりに印刷されることです。しかし、モーダルをスクロールしてから Ctrl+P を押すと、次のエラーが表示されます。
Uncaught TypeError: Cannot read property 'contentWindow' of undefined
不思議なことに、iframe が開いていても未定義のままですが、モーダル iframe をスクロールしたときだけです。モーダルを開いて Ctrl+P を押すと、正常に印刷されます。