我知道有两种方法可以调用浏览器的“打印”对话框(我当然使用了搜索):
他们之间有什么区别?跨浏览器支持?论文,文档或标准?哪个更正确?
另一个问题:打印给定网页部分的最直接方式是什么?我知道我们可以创建新窗口或iframe来调用上面的两种打印方法中的任何一种。哪一个陷阱较少?
答案 0 :(得分:14)
我已经测试了跨浏览器打印部分网页的不同方式:
Chrome,Firefox,Opera(12和新版),IE11,10,9和8.我尝试在页面上创建新的window
,新iframe
或使用existing iframe
。然后尝试.print()
和.execCommand('print')
。
注意:请记住,在窗口上调用.print(),在文档 上调用.execCommand()。< / p>
可以找到用于测试的代码here
如果我的测试代码错误,请纠正我,我只想找到最清楚的方法来完成这项工作。我的结论:
print()
iframe和Windows,当前窗口除外。print()
上调用documents
或在IE中创建的窗口会打破当前print()
上的document
。小心!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”属性