使用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通过下载处理程序下载。
我最早可以通过URL告诉OnBeforeBrowse,该网站正在尝试在面板中显示pdf,当然可以在OnBeforeResourceLoad和OnResourceResponse中看到MIME类型。
我的问题是在这种情况下如何使我的浏览器使用默认插件?
我唯一想到的解决方案是不设置CefCommandLineArgs.Add("disable-pdf-extension", "1")
,从而使此特殊的快速查看功能起作用。但是,如果我希望所有其他PDF都显示在默认PDF程序中,则需要拦截PDF下载(例如在OnBeforeBrowse中),并在其他.NET程序集(如HTTPWebRequest)的帮助下进行下载。这种方法的问题是我需要收集和发送Cookie,而且感觉好像是一种黑客攻击,如果网站发生更改,这种攻击将不会持续。
答案 0 :(得分:0)
我认为这是一个非常独特的情况,但是我将解释我的经验。虽然这也可能是一个网站问题,但它可能会帮助您使用CefSharp代码。
修补-我发现的问题 开始下载带来了一系列全新问题。首先是在调用startdownload之后做出了新的请求和响应,这意味着您可能陷入不断下载同一文件的循环中。在我的情况下,所有PDF都是由PopUp窗口创建的,因此在LifeSpanHandler中,我创建了一个新的ChromiumBrowser,并使用这个新创建的浏览器,让我的IRequestHandler等待MIMEType,如上面2所示。然后,我在主浏览器的IBrowser上调用了startDownload。这意味着实际的下载将在主浏览器和RequestHandler的不同实例上进行。
我还看到了许多示例,人们可以在BeforeBrowse事件中检查URL中的“ .pdf”,然后下载文件,同时也可以取消浏览。我无法执行此操作,因为该网站的URL中甚至都没有PDF。我第一次知道内容是在回应中。我尚未实现的一件事是如何在此(响应)阶段取消某些操作。 StackOverflow中有一个问题(现在无法找到),讨论了将URL设置为“”(无字符串)或伪域名。我还没有测试过,也不知道是否可以节省时间。