检测 Firefox 中的原生 PDF 查看器(Firefox 19 中引入)是否是主要 PDF 查看器

问题描述 投票:0回答:3

Firefox 在 Firefox 19 中引入了原生 PDF 查看器,效果相当不错。但是在我的网站上,我想检测 PDF 是否在 Adobe Acrobat Plugin 的本机 PDF 查看器中打开。

在此基础上我想告诉用户选择不同的查看器(Adobe Acrobat)。

javascript firefox
3个回答
1
投票

这个问题已在另一篇文章中得到解答:

如何检测 pdf.js 是否是 firefox 中的*默认*阅读器

该解决方案被其作者认为是“脆弱的”;这意味着它可能会被未来 Firefox 或 PDF.js 更新中的更改所破坏。 这是我找到的唯一可行的解决方案:

http://www.pinlady.net/PluginDetect/PDFjs/


0
投票

这更多的是相关的仅供参考,而不是直接答案,但对于通过谷歌最终到达这里的任何人来说:

到 2024 年,您应该能够检测浏览器是否具有通过 navigator.pdfViewerEnabled 启用的内部 PDF 查看器。然而,即使 PDF 处理程序设置为 Firefox 之外的某个值,Firefox 也会错误地将其报告为 true

在我的用例中,我希望在页内模式中显示 PDF(如果支持),但不希望模式在未发生内联渲染时显示。当我在 iframe 中加载 PDF 时,如果它是在 Firefox 外部处理的,则框架的内容 URL 仍为

about:blank
,因此检查这一点可以让我们推断 PDF 是在外部处理的,然后可以影响所需的任何其他下游更改.

// This is a react example, but should be adaptable to other contexts.

const [supportsInlinePdf, setSupportsInlinePdf] = useState(navigator.pdfViewerEnabled);
const onLoad = (event) => {
  if (e.target?.contentDocument?.URL === "about:blank") {
    setSupportsInlinePdf(false);
  }
}
// ...
<iframe src="some_pdf.pdf onLoad={onLoad} />

-1
投票

如果我们这样做会怎样:

if(document.contentType="text\html" && window.location.href.endsWith(".pdf") > -1)
        return true; // native PDF viewer is opened
else
        return false; 

以上代码片段基于以下假设:对于 PDF 文件,URL 始终以 .pdf 结尾。这有多可靠?

© www.soinside.com 2019 - 2024. All rights reserved.