我知道调用浏览器“打印”对话框的两种方法(当然我使用的是搜索):
- 文档.打印()
- document.execCommand('print', false, null)
它们有什么区别?支持跨浏览器?论文、文档或标准?使用哪个更正确?
另一个问题:打印网页给定部分的最直接方法是什么?我知道我们可以创建新窗口或 iframe 来调用上面两种打印方法中的任何一种。哪个坑少?
最佳答案
我测试了跨浏览器打印部分网页的不同方式:
Chrome、Firefox、Opera(12 和新版)、IE11、10、9 和 8。我尝试创建新的 window
, 新 iframe
, 或使用 existing iframe
在页面上。然后试了.print()
和 .execCommand('print')
.
注意:请记住,.print() 是在 window 上调用的,而 .execCommand() 是在 document 上调用的。
可以找到用于测试的代码here
如果我的测试代码有误,请纠正我,我只是想找到最清晰的方法来完成这项工作。我的结论:
- Opera 12 无法打印网页的一部分(?)
- IE 不
print()
iframe 和窗口,当前窗口除外。 - 调用
print()
在documents
在 iframe 中或在 IE 中创建的窗口打破了print()
当前document
.小心! - jQuery 插件 printThis使用 IE 的技巧来完成这项工作,而且它确实有效。唯一的异常(exception)是 Opera 12。顺便说一句,这个插件使用
print()
. -
execCommand('print')
几乎无处不在,适用于任何方法(iframe、窗口)。不过 Firefox 不支持它。 -
execCommand()
返回false
如果调用不成功,所以如果你不想使用插件和魔术,创建窗口或 iframe,调用execCommand('print')
如果它返回false
, 调用print()
.
还有一点:
创建 iframe
很棘手:您不能直接访问它的 window 或 document(是的,您有 ContentDocument 属性,它在不同浏览器中的行为不同)。你应该命名然后调用window.frames[name]
从该 iframe 获取 window 对象。不要尝试调用 window.frames(id)
- 它将返回 iframe。
关于javascript - 使用 Javascript 打印(部分)网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285902/