使用CEFSharp“快速查看”选项处理特殊网站上的PDF文件

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

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

要在默认的PDF程序中显示,我使用CefCommandLineArgs.Add("disable-pdf-extension", "1")命令并实现downloadhandler接口。要在插件中显示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 chromium-embedded
1个回答
0
投票

我相信这是一个非常独特的情况,但我将解释我的经验。虽然这可能更像是一个网站问题,但它可能会帮助您使用CefSharp代码。

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

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

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

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