使用Javascript打印(部分)网页

时间:2014-01-22 14:39:57

标签: javascript html web printing

我知道有两种方法可以调用浏览器的“打印”对话框(我当然使用了搜索):

  • document.print()
  • document.execCommand('print',false,null)

他们之间有什么区别?跨浏览器支持?论文,文档或标准?哪个更正确?

另一个问题:打印给定网页部分的最直接方式是什么?我知道我们可以创建新窗口或iframe来调用上面的两种打印方法中的任何一种。哪一个陷阱较少?

3 个答案:

答案 0 :(得分:14)

我已经测试了跨浏览器打印部分网页的不同方式: Chrome,Firefox,Opera(12和新版),IE11,10,9和8.我尝试在页面上创建新的window,新iframe或使用existing iframe。然后尝试.print().execCommand('print')

注意:请记住,在窗口上调用.print(),在文档 上调用.execCommand()。< / p>

可以找到用于测试的代码here

如果我的测试代码错误,请纠正我,我只想找到最清楚的方法来完成这项工作。我的结论:

  • Opera 12无法打印部分网页(?)
  • IE不会print() iframe和Windows,当前窗口除外。
  • 在iframe内的print()上调用documents或在IE中创建的窗口会打破当前print()上的document。小心!
  • jQuery插件printThis使用IE的技巧来完成这项工作,它只是起作用。唯一的例外是Opera 12.顺便说一下,这个插件使用print()
  • execCommand('print')几乎可以在任何地方使用任何方法(iframe,窗口)。但它并不支持Firefox。
  • 如果调用失败,则
  • execCommand()会返回false,因此如果您不想使用插件和魔术,请创建窗口或iframe,请调用execCommand('print'),如果它返回{{} 1}},请致电false

还有一件事:

创建print()非常棘手:您无法直接访问其窗口文档(是的,您有ContentDocument属性,它在浏览器中的行为方式不同)。您应命名,然后致电iframe以从该iframe获取窗口对象。请勿尝试拨打window.frames[name] - 它会返回 iframe

答案 1 :(得分:3)

接受的答案中提到的最后一种方法最终看起来像这样:

iframe = document.getElementById('iframe-id');
var printed = iframe.contentWindow.document.execCommand('print', false, null);

if (!printed) window.print();

替代:

try {
    iframe = document.getElementById('iframe-id');
    iframe.contentWindow.document.execCommand('print', false, null);
}
catch(e) {
    window.print();
}

printThis使用的类似方法

if (document.queryCommandSupported("print")) {
    $iframe[0].contentWindow.print();
    $iframe[0].contentWindow.document.execCommand("print", false, null);
} else {
    $iframe[0].contentWindow.focus();
    $iframe[0].contentWindow.print();
}

答案 2 :(得分:0)

您可以使用window.open和execComand的组合(saveas 为例:

<script  type= "text/javascript">
 function saveas() {
  var oPrntWin = window.open("","_blank","width=1,height=1,left=1,top=1,menubar=yes,toolbar=yes,resizable=yes,location=no,scrollbars=yes");
  oPrntWin.document.open();
  oPrntWin.document.write(editeur.innerHTML);
  oPrntWin .document.execCommand("SaveAs",true,"C:\\My Documents\\Saved Content.html");
 oPrntWin.document.close();
 }
 </script> 

editeur.html是我的文档的一部分  你可以为你的框架做同样的事情 用新的窗口替换主体的“src”属性