2017-06-20 68 views
0

我的web應用程序(java,jsp,js)中有一個按鈕,允許通過從屏幕的選定區域獲取HTML進行打印,並將其放置在iframe調用'iFramePrint'然後打印它。由於最近的Windows更新,我需要替換iFrame打印

<iframe name="iFramePrint" frameborder="0" src="Blank.jsp" marginheight="0" marginwidth="0" width="0" height="0"></iframe> 

function doPrint() { 
    if (window.frames['iFramePrint'].document.body) { 

     var str = '<B>'+'<h1>' + document.getElementById('tdMainTitle').innerHTML +'</h1>'+'</B>'; 
     str += '<BR>'; 
     etc. 
     str=str.replace(/BORDER=0/g ,"border=1"); 
     window.frames['iFramePrint'].document.body.innerHTML = str; 
     window.frames['iFramePrint'].focus(); 
     window.frames['iFramePrint'].print(); 
    } 
} 

這很有效,很長一段時間,但是由於最近的Windows更新,代碼不再有效。見下文。

https://answers.microsoft.com/en-us/ie/forum/ie11-iewindows_10/cannot-print-single-frames-iframes-popups-after/e431c6e1-5f27-4bef-93ce-d8d9ae23a477

我最好不想等待微軟解決這一問題 - 它可能是一段時間。我不想問客戶卸載KB4022715(知識庫編號根據Windows版本的不同而不同,但通常來說,這是7月份發佈的針對7月份的安全更新彙總),可以解決問題。

我有一個解決方案如何解決這個問題 - 取HTML並將其轉換爲PDF,然後允許用戶下載PDF,這絕對是可行的。請參閱Converting HTML files to PDF - 只是想知道是否有更好的方法。

回答

0

迄今爲止發現的最佳解決方案是用新窗口替換iFramePrint。

function doPrint() { 
     var str = '<B>'+'<h1>' + document.getElementById('tdMainTitle').innerHTML +'</h1>'+'</B>'; 
     str += '<BR>'; 
     etc. 
     str=str.replace(/BORDER=0/g ,"border=1"); 
     w=window.open(); 
     w.document.write('<html><head><title>Printout</title>'); 
     w.document.write('</head><body >'); 
     w.document.write(str); 
     w.document.write('</body></html>'); 
     w.document.close(); 
     w.focus(); 
     w.print(); 
     w.close(); 
} 

多虧window.print() not working in IE @pratik和How to print HTML content on click of a button, but not the page? 到@jaay還有其他答案有沒有打開一個新的窗口,它可能會做的伎倆。