我正在尝试使用具有动态内容的window.open
打开一个新窗口(对于打印功能,我使用此动态内容)。下面的动态HTML是不可见的window.open
页面,在查看源它是可用的。请告诉我为什么没有显示在那里。
代码如下:
var win = window.open('', 'title', 'toolbar=0,location=0,menubar=0,resizable=yes,width=' + (screen.width - 100) + ', height=' + (screen.height - 150));
win.document.write("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
win.document.write("<html>");
win.document.write("<head><title>title</title>");
win.document.write('<script language="javascript" type="text/javascript">function printPage() { PrintDiv("defaultPrintBuffer"); }</script>');
win.document.write('</head>');
win.document.write('<body>');
win.document.write("<iframe width='560' height='315' id='defaultPrintBuffer2' name='defaultPrintBuffer2'>");
win.document.write(iframeContent);
win.document.write("</iframe>");
win.document.write('</body>');
win.document.write("</html>");
win.document.close();
win.focus();
win.printPage();
既然您提到您正在尝试实现打印,那么我将在回答中而不是注释中添加我是如何解决这个问题的,这样代码更易于阅读。基本上,我制作了一个空的(但有效的)html页面,并在打印之前将节点插入该页面。这避免了文档的使用。Write和iframe,这在很多情况下被认为是不好的做法。如果您真的想使用iframe,只需将iframe添加到打印页面html中,并将您的内容附加到该节点而不是附加到正文中。
var data = $('myPartOfPageSelector'),
printPage;
if (!data || !data.length) alert('Nothing to print.');
else {
printPage = window.open('resources/print.html');
setTimeout(function() {
printPage.document.body.innerHTML = data.innerHTML;
printPage.print();
printPage.close();
}, 100);
}
iframe
标签不显示你放进去的内容,你必须在iframe中加载一个页面。
您可以使用脚本将内容放入iframe:
win.document.write("<iframe width='560' height='315' id='defaultPrintBuffer2' name='defaultPrintBuffer2'>");
win.document.write("</iframe>");
win.document.write("<script type='text/javascript'>var doc = document.getElementById('defaultPrintBuffer2').contentWindow.document;doc.open();doc.write('" + iframeContent.replace("'","\'").replace("\","\\") + "');doc.close();</script>");
注意内容本身应该是一个完整的HTML文档