Pdf.js: 在 IE11 中从 iframe 打印会打印周围的页面而不是文档

创建于 2019-05-22  ·  3评论  ·  资料来源: mozilla/pdf.js

笔记:
这之前在 #7711 和可能在 #6152 中报告过,但错误地关闭为已修复或不相关

配置:

  • Web 浏览器及其版本:IE 11.0.9600.19356,更新版本 11.0.125
  • 操作系统及其版本:Windows 7
  • PDF.js 版本:2.0.943
  • 是否为浏览器扩展:否

重现问题的步骤:

  1. 将查看器加载到 iframe
  2. 使用 javascript 从主页触发打印 (iframe.contentWindow.print())

测试用例
https://kleins05.github.io/pdf.js/test-ieiframe/
(IE11加载,点击打印按钮,查看打印输出)

预期的行为是什么?
应打印 iframe 中的 PDF。

什么地方出了错?
打印周围的页面。
Screen Shot 2019-05-22 at 13 21 01

最有用的评论

我找到了原因。 与 IE 中的其他浏览器不同,window.print 会打印当前聚焦的框架/窗口,不一定是window所指的那个。 使用 document.execCommand 可以避免这种情况。

在 web/pdf_print_service.js:187 而不是 print.call(window); 采用:

var result = window.document.execCommand('print', false, null);
if (!result) {
   print.call(window);
}

尽管您对 IE11 的支持有限,但如果您乐于接受拉取请求,我愿意创建一个。 让我知道。

所有3条评论

IE11 对打印的支持一般是有限的,另外请参考FAQ 的相关部分

虽然该库和默认查看器暂时仍应在 IE 11/Edge(非基于 Chromium)中工作,但某些功能/特性可能不可用,并且与现代浏览器相比性能会更差。 展望未来,只有完全阻止库和/或默认查看器运行的错误才会被接受。

我找到了原因。 与 IE 中的其他浏览器不同,window.print 会打印当前聚焦的框架/窗口,不一定是window所指的那个。 使用 document.execCommand 可以避免这种情况。

在 web/pdf_print_service.js:187 而不是 print.call(window); 采用:

var result = window.document.execCommand('print', false, null);
if (!result) {
   print.call(window);
}

尽管您对 IE11 的支持有限,但如果您乐于接受拉取请求,我愿意创建一个。 让我知道。

尽管您对 IE11 的支持有限,但如果您乐于接受拉取请求,

不幸的是,出于各种原因,例如可读性/可维护性/性能,我们从未接受放置在主代码库中的兼容性“黑客”,而这些总是仅限于放置在https://github.com/mozilla/pdf中的 polyfill

此外,在这个时间点,一个错误需要阻止在 IE11 中使用该库才被认为是有效的。 (预计未来的 PDF.js 版本,据我所知仍有待决定,将 IE11 标记为明确不受支持并删除剩余的少量兼容性代码。从历史上看,尝试支持 IE11 限制了使用现代 JavaScript 功能的能力,并迫使贡献者花费大量时间来支持一个基本上死掉的浏览器。)

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

brandonros picture brandonros  ·  3评论

smit-modi picture smit-modi  ·  3评论

hp011235 picture hp011235  ·  4评论

aaronshaf picture aaronshaf  ·  3评论

THausherr picture THausherr  ·  3评论