笔记:
这之前在 #7711 和可能在 #6152 中报告过,但错误地关闭为已修复或不相关
配置:
重现问题的步骤:
测试用例
https://kleins05.github.io/pdf.js/test-ieiframe/
(IE11加载,点击打印按钮,查看打印输出)
预期的行为是什么?
应打印 iframe 中的 PDF。
什么地方出了错?
打印周围的页面。
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 功能的能力,并迫使贡献者花费大量时间来支持一个基本上死掉的浏览器。)
最有用的评论
我找到了原因。 与 IE 中的其他浏览器不同,window.print 会打印当前聚焦的框架/窗口,不一定是
window
所指的那个。 使用 document.execCommand 可以避免这种情况。在 web/pdf_print_service.js:187 而不是 print.call(window); 采用:
尽管您对 IE11 的支持有限,但如果您乐于接受拉取请求,我愿意创建一个。 让我知道。