问题描述
我已经使用.NET 4.7.2和CEFSharp 84.4.10构建了Winforms应用程序。
我加载了一个网站,该网站具有指向各种文件的链接,包括PDF,TXT,DOCX等... 链接的html是这样的:
<a href="relative_url/filename.ext" target="_blank">icon_here</a>
例如,当我单击指向docx的链接时,它的CEFSharp将在应用程序顶部打开一个空白窗口,然后打开保存文件对话框。当您在文件对话框中按保存时,它将关闭,但空白窗口保持打开状态。
我要执行以下操作:
我可以找出如何在默认的OS查看器中单独打开文件的方法,我想在这里着重于自动下载特定文件类型。
我花了数小时寻找如何做到这一点的例子,空手而归。
我以为我可以在DownloadHandler.OnBeforeDownload中检测文件的类型,然后根据以下内容,只需在回调中将showDialogue设置为false,然后在DownloadHandler.OnDownloadUpdated中检测到downloadItem.IsComplete,然后启动文件的类型是否正确。
Force CEFSharp to download without showing dialog
但是,当我尝试这样做时,我遇到了以下问题:
-
空白窗口仍会打开并保持打开状态。
-
我发现,如果我在DownloadHandler.OnDownloadUpdated中设置了一个断点,则可以看到ReceivedBytes从零到TotalBytes,并且InProgress为true,然后按F5继续以将ReceivedBytes更改回零,并且InProgress为false,但是IsComplete和IsCanceled始终保持为false。我本以为一旦下载完成,IsComplete便会成立。
我很高兴与CEFShap合作,将非常感谢您提供的任何指导或示例。
感谢您的时间。
更新1:
我尝试过的代码如下:
注意:我发现在为回调分配路径之后,在OBeforeDownload中继续操作可以修复IsComplete未被设置为true的问题。但是空白窗口打开的问题仍然存在。
在托管CEFSharp的Winform中,我初始化了控件,如下所示:
browser = new ChromiumWebbrowser("https://localhost:44393/Default.aspx");
var downloadHandler = new DownloadHandler();
browser.DownloadHandler = downloadHandler;
在DownloadHandler.cs中:
public class DownloadHandler : IDownloadHandler
{
public event EventHandler<DownloadItem> OnBeforeDownloadFired;
public event EventHandler<DownloadItem> OnDownloadUpdatedFired;
public void OnBeforeDownload(IWebbrowser chromiumWebbrowser,Ibrowser browser,DownloadItem downloadItem,IBeforeDownloadCallback callback)
{
OnBeforeDownloadFired?.Invoke(this,downloadItem);
if (!callback.Isdisposed)
{
using (callback)
{
//Todo: Detect file Type/Mime and auto download or show Save File dialogue as needed here
callback.Continue(Path.Combine(@"C:\Temp",downloadItem.SuggestedFileName),showDialog: false); // set to false so we don't show
}
}
}
public void OnDownloadUpdated(IWebbrowser chromiumWebbrowser,IDownloadItemCallback callback)
{
OnDownloadUpdatedFired?.Invoke(this,downloadItem);
if (downloadItem.IsComplete)
{
//Todo: Detect File Type/Mime and automatically open in default OS viewer
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)