実現したいこと
ページ内にiframeを作りPDFを埋め込み、iframe内のPDFを印刷させる機能を作っています。
印刷まではうまくいっていますが、プリント後のonafterprintにiframeを消す部分が発火されず実行されません。
js
1fetch(url) 2 .then(response => response.blob()) 3 .then(blob => { 4 // BlobをURLに変換する 5 const pdfUrl = URL.createObjectURL(blob); 6 7 // PDFを表示するためのiframeを作成 8 const iframe = document.createElement("iframe"); 9 iframe.style.display = "none"; 10 document.body.appendChild(iframe); 11 12 // iframeの中にPDFを表示する 13 iframe.src = pdfUrl; 14 iframe.onload = () => { 15 if (iframe.contentWindow) { 16 iframe.contentWindow.print(); 17 // TODO : なぜかonafterprintが呼ばれない 18 iframe.contentWindow.onafterprint = function () { 19 console.log("Print completed."); 20 document.body.removeChild(iframe); 21 }; 22 } 23 }; 24 }) 25 .catch(error => { 26 console.error(error); 27 })
試したこと
以下のように生成したPDFUrlをsrcとして指定しなかった場合は、onafterprintが発火され、iframeが消えてくれました。
js
1 iframe.src = "";
色々試してみましたが、お手上げ状態です。
srcが指定ありと指定なしで動作の違いがあることが全く分かりません。
追記
入れ替えても動きませんでした。
if (iframe.contentWindow) { iframe.contentWindow.onafterprint = function () { console.log("Print completed."); document.body.removeChild(iframe); }; iframe.contentWindow.print(); }
タイトル誤字してるので修正願います

回答2件
あなたの回答
tips
プレビュー