由于最新的Windows Update,我需要替换iFrame打印

时间:2017-06-20 16:17:18

标签: javascript html iframe windows-update

我的网络应用程序(java,jsp,js)中有一个按钮,它允许通过从屏幕的选定区域获取HTML进行打印,并将其放在名为“iFramePrint”的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 Update,代码不再有效。见下文。

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月安全更新汇总),这确实解决了问题。

我有一个解决方案如何解决这个问题 - 获取HTML并将其转换为PDF,然后允许用户下载PDF,这绝对是可行的。见Converting HTML files to PDF - 只是想知道是否有更好的方法。

1 个答案:

答案 0 :(得分: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 还有其他答案可能会在没有打开新窗口的情况下完成。