cefsharp - 使用 CEFSharp 处理带有 "quick view"选项的特殊网站上的 PDF 文件

标签 cefsharp chromium-embedded

使用 CEFsharp,我希望可以选择允许 PDF 插件显示 PDF,或者使用 PC 上安装的默认 PDF 程序下载并显示文件。

为了在默认 PDF 程序中显示,我使用 CefCommandLineArgs.Add("disable-pdf-extension", "1") 命令并实现 downloadhandler 接口(interface)。为了在插件中显示 pdf,我没有设置命令 CefCommandLineArgs.Add("disable-pdf-extension", "1"),这又意味着不会调用下载处理程序。

有一个网站具有某种文件快速查看功能。这意味着它有一个显示文件的面板。问题是,使用 CefCommandLineArgs.Add("disable-pdf-extension", "1") 后,网站面板将留空,并且通过下载处理程序下载 PDF。

我早在 OnBeforeBrowse(通过 URL)就知道该网站正在尝试在面板中显示 pdf,当然还可以在 OnBeforeResourceLoad 和 OnResourceResponse 中看到 MIME 类型。

我的问题是在这种情况下如何让我的浏览器使用默认插件?

我能想到的唯一解决方案是不设置CefCommandLineArgs.Add("disable-pdf-extension", "1")从而允许这个特殊的快速查看功能工作。但是,如果我希望在默认 PDF 程序中显示所有其他 PDF,我需要拦截 PDF 下载(例如在 OnBeforeBrowse 中)并在其他 .NET 程序集(如 HTTPWebRequest)的帮助下下载它。这种方法的问题是我需要收集和发送cookie,而且感觉就像是一种黑客行为,如果网站发生变化,这种黑客行为就不会持续下去。

最佳答案

我相信这是一个非常独特的情况,但我会解释我的经历。虽然这也可能更多是一个网站问题,但它可能会对您的 CefSharp 代码有所帮助。

  1. 我没有禁用 pdf 查看器。这意味着所有 PDF 都将在浏览器窗口中呈现。
  2. 如果我选择希望我的 PDF 使用默认 PDF 应用程序自动打开,那么我会检查 OnResourceResponse Method 中“application/pdf”的响应对象 MIMEType。 。
  3. 然后我调用 StartDownload在提供响应的 URL 上。

修补 - 我发现的问题 开始下载会带来一系列全新的问题。首先,在调用 startdownload 之后会发出新的请求和响应,这意味着您可能会陷入不断下载同一文件的循环中。就我而言,所有 PDF 都是由 PopUp 窗口创建的,因此在 LifeSpanHandler 中我创建了一个新的 ChromiumBrowser,并且使用这个新创建的浏览器,我让 IRequestHandler 等待 MIMEType,如上面 2 所示。然后我在主浏览器的 IBrowser 上调用 startDownload。这意味着实际下载将发生在主浏览器和 RequestHandler 的不同实例上。

我还看到许多示例,人们只需在 BeforeBrowse 事件中检查 URL 中的“.pdf”,然后下载文件,同时还可以取消浏览。我无法执行此操作,因为该网站的 URL 中甚至没有 PDF。我第一次知道内容是在回复中。我尚未实现的一件事是如何在此(响应)阶段取消某些操作。 StackOverflow 中有一个问题(现在找不到)讨论将 URL 设置为“”(无字符串)或假域名。我没有对此进行过测试,也不知道这是否可以节省时间。

关于cefsharp - 使用 CEFSharp 处理带有 "quick view"选项的特殊网站上的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55394267/

相关文章:

javascript - 使用 CefGlue/CE​​F3 从 JavaScript 调用 .NET

javascript - CEF 支持哪个版本的 ECMAScript?

c# - ChromiumFX - 如何同步获取 HTML 源代码?

javascript - 有什么方法可以在我的 c# 程序中捕获从 cefsharp 中的 javascript 抛出的错误吗?

javascript - 如何向网站提供虚假 GPU 信息

c# - 如何在 .NET C# 中获取 CefSharp DevTools 元素选择器的输出?

c++ - 在 CEF 中管理 cookie

javascript - C# Cefsharp 无法 getElementsByClassName

C# CefSharp DevTool 的关闭按钮不起作用

c++ - CEF 从嵌入式资源加载 HTML