使用Javascript打印(部分)网页
我知道有两种方法可以调用浏览器的“打印”对话框(当然,我使用了搜索):使用Javascript打印(部分)网页,javascript,html,web,printing,Javascript,Html,Web,Printing,我知道有两种方法可以调用浏览器的“打印”对话框(当然,我使用了搜索): 文件.打印() document.execCommand('print',false,null) 他们之间有什么区别?支持跨浏览器?论文、文件还是标准?使用哪一个更正确 另一个问题:打印网页给定部分最直接的方法是什么?我知道我们可以创建新窗口或iframe来调用上面两种打印方法中的任何一种。哪一个陷阱较少?我已经测试了跨浏览器打印部分网页的不同方法: Chrome、Firefox、Opera(12和新)、IE11、10、
- 文件.打印()
- document.execCommand('print',false,null)
另一个问题:打印网页给定部分最直接的方法是什么?我知道我们可以创建新窗口或iframe来调用上面两种打印方法中的任何一种。哪一个陷阱较少?我已经测试了跨浏览器打印部分网页的不同方法: Chrome、Firefox、Opera(12和新)、IE11、10、9和8。我已尝试创建新的
窗口
、新的iframe
,或在页面上使用现有的iframe
。然后尝试了.print()
和.execCommand('print')
注意:请记住,.print()是在窗口中调用的,而.execCommand()是在文档中调用的
可以找到用于测试的代码
如果我的测试代码是错误的,请纠正我,我只是想找到最清晰的方法来完成这项工作。我的结论:
- Opera 12无法打印网页的一部分(?)
- IEs不
iFrame和窗口,当前窗口除外print()
- 在iFrame内部或IEs中创建的窗口中调用
documents上的
,会中断当前print()
文档上的
。小心李>print()
- jQuery插件使用IE的技巧来完成这项工作,而且它很有效。唯一的例外是歌剧12。顺便说一下,这个插件使用
print()
几乎在任何地方都可以使用任何方法(iFrame、window)。但是Firefox不支持它execCommand('print')
如果调用不成功,则返回execCommand()
,因此如果不想使用插件和魔术,请创建窗口或iframe,调用false
,如果返回execCommand('print')
,则调用false
print()
- jQuery插件使用IE的技巧来完成这项工作,而且它很有效。唯一的例外是歌剧12。顺便说一下,这个插件使用
创建
iframe
很棘手:您不能直接访问其窗口或文档(是的,您有ContentDocument属性,它在不同浏览器中的行为不同)。您应该命名它,然后调用window.frames[name]
从该iframe获取window对象。不要尝试调用window.frames(id)
-它将返回iframe接受答案中提到的最后一个方法,然后,结果如下所示:
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();
}
您可以使用window.open和execomand(saveas)的组合 例如:
函数saveas(){
var oPrntWin=window.open(“,”_blank“,”宽度=1,高度=1,左侧=1,顶部=1,菜单栏=yes,工具栏=yes,可调整大小=yes,位置=no,滚动条=yes”);
oPrntWin.document.open();
oPrntWin.document.write(editeur.innerHTML);
oPrntWin.document.execCommand(“SaveAs”,true,“C:\\My Documents\\Saved Content.html”);
oPrntWin.document.close();
}
editeur.html是我的文档的一部分
你可以为你的框架做同样的事情
将新窗口中的写入替换为正文的属性“src”在大多数情况下,您将使用document.print()。请查看document.execCommand的文档:@HarveyA.Ramer该链接没有记录任何
print
命令。@torazaburo这里是GitHub的一个关于打印可能性的大总结,其中包括execCommand('print')示例:它似乎使用了这个jQuery插件:在Android浏览器上,窗口[iframeName].document.execCommand('print')
似乎可以打印整个页面。您看到了吗?请注意,根据,Android 5-6(棒棒糖棉花糖)不支持此功能.@torazaburo不,我只对桌面浏览器感兴趣。@torazaburo我也遇到了同样的问题。Android chrome打印整个页面,而不仅仅是iframe。你有什么解决办法吗?如果有人能帮忙,谢谢你。@Rajkishore这是一个已知的漏洞,仍然很突出,不幸的是,我现在懒得追踪链接。这个问题是关于将页面发送到打印机,而不是关于将其保存为文件
<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>