javascript - 使用 Javascript 打印(部分)网页

标签 javascript html web printing

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

  • 文档.打印()
  • 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很棘手:您不能直接访问它的 windowdocument(是的,您有 ContentDocument 属性,它在不同浏览器中的行为不同)。你应该命名然后调用window.frames[name]从该 iframe 获取 window 对象。不要尝试调用 window.frames(id) - 它将返回 iframe

关于javascript - 使用 Javascript 打印(部分)网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285902/

相关文章:

Javascript索引

javascript - Protractor : mocking EventSource

Javascript,字符串格式 : I need the first 4 letters of a string, 小写,省略空格,删除符号

javascript - 如何在窗口加载后加载图像?

php - 如何在引用 web url 时避免 mysql 注入(inject)

javascript - 从网站上使用 DYMO 标签打印机打印

javascript - three.js中 `THREE.OrbitControls`的相机位置变化

Javascript 菜单向左移动并在 Android 浏览器的屏幕右侧显示间隙

javascript - jQuery 'on' 事件在 'load' 事件后不起作用

html - 表格列的宽度不一样?