我已经使用标签嵌入了一个 pdf 文件。
<iframe id="iframepdf" src="files/example.pdf"></iframe>
这在 Chrome、IE8+、Firefox 等中运行良好,但出于某种原因,当某些人在 IE8 中查看它时,文件正在下载而不是嵌入。我知道这个浏览器已经过时了,但它是我办公室的标准浏览器,因此,网站必须为此设计。
有没有人知道为什么会发生这种情况,我该如何解决它或者发出错误消息而不是让文件下载?
原文由 user2931470 发布,翻译遵循 CC BY-SA 4.0 许可协议
可能 是没有安装Adobe Reader插件下载的。在这种情况下,IE(无论哪个版本)不知道如何呈现它,它只会下载文件(例如,Chrome 有自己的嵌入式 PDF 呈现器)。
如果您想 尝试 检测 PDF 支持,您 _可以_:
!!navigator.mimeTypes["application/pdf"]?.enabledPlugin
(现已弃用,可能仅在某些浏览器中受支持)。navigator.pdfViewerEnabled
(实时标准,它可能会改变,目前没有得到广泛支持)。2021 :现在原来的答案肯定已经过时了。除非你需要支持相对较旧的浏览器,否则你应该简单地使用
<object>
(最终有后备)并保留它。就是说。
<iframe>
不是显示 PDF 的最佳方式(不要忘记与移动浏览器的兼容性,例如 Safari)。某些浏览器将始终在外部应用程序(或另一个浏览器窗口)中打开该文件。我发现的最佳和最兼容的方式有点棘手,但适用于我尝试过的所有浏览器(甚至已经过时):保留您的 <
iframe>
但不要在其中显示 PDF,它将填充一个包含<object>
标签的 HTML 页面。为您的 PDF 创建一个 HTML 包装页面,它应该 如下 所示:当然,你还需要在浏览器中安装相应的插件。另外,如果您需要在移动设备上支持 Safari,请查看 这篇文章。
为什么是 HTML 页面?因此,如果不支持 PDF 查看器,您可以提供回退。内部查看器、纯 HTML 错误消息/选项等…
检查 PDF 支持很棘手,以便您可以为客户提供备用查看器,看看 PDF.JS 项目;它非常好,但渲染质量 - 对于桌面浏览器 - 不如 本机 PDF 渲染器(我认为由于屏幕尺寸,我没有看到移动浏览器有任何差异)。