【发布时间】:2019-03-06 22:08:34
【问题描述】:
我一直在尝试打印一个动态创建的 iFrame,然后打印它:
// CREATE iFrame
let iframe = document.createElement("iframe");
iframe.setAttribute('id', 'printerIFrame');
iframe.setAttribute('name', 'printerIFrame');
iframe.setAttribute('style', ' z-index: 1000;');
iframe.setAttribute('media', 'print');
let pageContent = document.createTextNode(createPrintableText(criteria));
// ADD iFrame to document
document.body.appendChild(iframe);
// POPULATE iFrame with print material
iframe = document.getElementById("printerIFrame");
body = iframe.contentWindow.document.getElementsByTagName('body')[0];
body.appendChild(pageContent)
// GET iFrame `window`
var x = document.getElementById("printerIFrame").contentWindow;
// IF NOT IE or Edge
x.document.close();
x.focus();
x.print();
iframe.parentNode.removeChild(iframe);
这很有效……有点。问题是,当打印预览到达时,包含在文本中的是 iframe 上的所有 标记。他们被忽略了。而不是得到这个:
开始日期:2019 年 1 月 1 日
结束日期:2019 年 1 月 31 日
我得到这样的东西: 开始日期:01/01/2019结束日期:01/31/2019
任何想法如何让它工作?
【问题讨论】:
-
pageContent是一个文本节点...因此使用appendChild添加它会将确切的文本添加到该变量中.. 尝试body.innerHTML = pageContent代替 -
哦,您还需要
let pageContent = createPrintableText(criteria);- 即您不想创建文本元素,只要文本就可以了
标签: javascript iframe printing