Colorbox を iframe モードで使用していますが、奇妙な問題が発生しています。私の iframe にはフォームと別の iframe (印刷するコンテンツのプレビューを含む) が含まれており、フォームの送信ハンドラーで、埋め込まれた iframe で window.print() を呼び出してから、カラーボックスを閉じます。私のコードは次のように接続されています:
$('#printer_friendly_form').submit(function () {
var previewWindow = $('iframe#print_preview').get(0).contentWindow;
setZoom($('html', previewWindow.document), 1);
previewWindow.focus();
previewWindow.print();
$('#print_preview').css('visibility', 'hidden');
parent.$.colorbox.close();
return false;
});
「setZoom」ビットは、水平スクロールバーのない印刷プレビュー用に、埋め込まれた iframe のコンテンツを縮小するために私が行っているちょっとしたトリックです。印刷する前にズームを 1 に戻して、正しく印刷されるようにしています。このコードを削除しようとしましたが、当面の質問には影響がないようです。
私が抱えている問題は、Chrome で、Chrome の印刷プレビュー ダイアログを閉じた後、カラーボックスが最終的に閉じるまでに 5 ~ 8 秒かかることです。「previewWindow.print()」行を削除すると、カラーボックスがすぐに閉じます。私のデバッグから、Chrome は印刷を同期呼び出しとして扱うため、印刷ダイアログが消えた後でのみ close が呼び出されます。しかし、それは直後に呼び出され、関数が返されるため、実際に閉じる際の遅延をどのように説明するかわかりません。
また、IE9 では、カラーボックスがすぐに閉じることもわかりました (印刷ダイアログが表示される前であっても、IE は非同期でなければなりません)。同様に、Firefox (これも Chrome のように同期しているようです) は、印刷ダイアログが終了した直後にカラーボックスを閉じます。
これは Chrome のバグ/「機能」ですか、それともダイアログをすぐに閉じるために他にすべきことはありますか?