Javascript 新窗口打开并打印 css 加载

Posted

技术标签:

【中文标题】Javascript 新窗口打开并打印 css 加载【英文标题】:Javascript new window open and print css loading 【发布时间】:2019-01-27 05:01:58 【问题描述】:

我想使用新窗口打印部分 html

    var cssLink = document.getElementByTagName('link')[2];

    var prtContent = document.getElementById('print_body');

    var WinPrint = window.open('','','left=0,top=0,width=1000,height=auto,toolbar=0,scrollbars=0,status=0');

    WinPrint.document.write(prtContent.innerHTML);
    WinPrint.document.getElementsByTagName('head')[0].appendChild(link);
    WinPrint.document.close();

    WinPrint.focus();
    WinPrint.print();

但是有时当 WinPrint 进行系统打印时,CSS 文件仍然没有加载。

我该如何解决?

【问题讨论】:

这段代码何时触发?点击一下?或者就像它加载页面一样?这段代码放在哪里? 我认为您需要以某种方式预加载 css 文件或至少在新窗口中侦听加载事件,您是否尝试在 WinPrint.onload 函数中调用 print 方法?如果这不起作用,那么您可能需要在 ajax 调用中以纯文本格式请求该 css 文件的内容,并将其直接注入到样式标记内新窗口的 DOM 中 此代码在单击打印按钮时运行 【参考方案1】:

听起来有时浏览器没有及时加载 CSS 文件以供您打印。您只能在加载 css 文件后运行打印代码,如下所示:

var cssElement = document.getElementsByTagName('link')[2].cloneNode();

var prtContent = document.getElementById('print_body');

var WinPrint = window.open('','','left=0,top=0,width=1000,height=auto,toolbar=0,scrollbars=0,status=0');

WinPrint.document.write(prtContent.innerHTML);
WinPrint.document.close();

cssElement.addEventListener('load', function () 
  WinPrint.focus();
  WinPrint.print();
);

WinPrint.document.head.appendChild(cssElement);

【讨论】:

这不适用于 Edge。 WinPrint.document.head.appendChild(cssElement)会报错【参考方案2】:

我认为它对你有用。

var cssLink = document.getElementByTagName('link')[2];

var prtContent = document.getElementById('print_body');

// open _blank page view before printing
var WinPrint = window.open('','_blank','left=0,top=0,width=1000,height=auto,toolbar=0,scrollbars=0,status=0');

// add new line code here
WinPrint.document.open();
WinPrint.document.write(prtContent.innerHTML);
WinPrint.document.getElementsByTagName('head')[0].appendChild(link);
WinPrint.document.close();
// remove WinPrint.focus() and WinPrint.print() because it will call print machine of system

因此,如果您想显示 css 进行打印。你可以试试。

@media print 
    your css here

在此处查看更多信息:https://www.w3.org/Amaya/User/doc/Printing.html

【讨论】:

我以前用过这个方法,但我不太确定是不是我在模态中的 print_body,当我打印 css 时不能正常工作。

以上是关于Javascript 新窗口打开并打印 css 加载的主要内容,如果未能解决你的问题,请参考以下文章

javascript中用window.open(url)方法打开一个新窗口之后,新窗口已存在,如何让这个新窗口显示?

可以使用 Javascript 打开 PDF 文件的打印对话框吗?

用JavaScript打开一个新窗口并关闭前一个[重复]

html超链接新窗口打开

Javascript - 表单选择元素在新窗口中打开 url 并提交表单

window.open打开新窗口名写入内容 怎么才能保持新窗口原来的内容