我正在尝试使用cefsharp winforms从我的应用程序下载一些文件(图像,文件音频或其他内容).我读了其他任何帖子,但似乎没什么用.你有没有示例代码向我展示如何实现cefsharp的下载程序?
当然,当我现在尝试下载一些文件时,没有任何反应.
谢谢
要解决此问题,只需下载此处的类DownloadHandler.cs即可 .
之后,将其导入Visual Studio项目,并将此行添加到主窗体的代码中:MyBrowser.DownloadHandler = new DownloadHandler();
并将其添加到代码的顶部:using CefSharp.Example;
然后尝试从浏览器下载内容,它应该可以工作!
2天后,我终于做到了.对于有相同问题的人来说,这是一个简单的解决方案.如果您正在使用MinimalExample,则必须下载Cefsharp示例(cefsharp-master)解压缩并执行以下操作:
右键单击您的项目 - >添加现有项目
在cefsharp-master中导航 - > CefSharp.example - >选择DownloadHandler.cs
进入您的BrowserForm.cs类并输入以下内容:
browser.DownloadHandler = new DownloadHandler();
完成!
我包含以下内容,因为OnBeforeDownloadFired()的实现未在许多关于如何使用DownloadHandler类的在线示例中显示,并且在引用的DownloadHandler.cs中缺少它.
如果下载链接具有目标"_blank",这有助于解决下载文件(例如.mobi电子书)的唠叨问题.如果没有目标,则会触发下载对话框.使用_blank目标,我必须禁止弹出窗口并在浏览器中打开一个新的自定义选项卡,但是当发生这种情况时,不会触发下载对话框.
我认为这是对的.希望它有所帮助,或者至少给你一个开始:
DownloadHandler downer = new DownloadHandler(this); browser.DownloadHandler = downer; downer.OnBeforeDownloadFired += OnBeforeDownloadFired; downer.OnDownloadUpdatedFired += OnDownloadUpdatedFired; private void OnBeforeDownloadFired(object sender, DownloadItem e) { this.UpdateDownloadAction("OnBeforeDownload", e); } private void OnDownloadUpdatedFired(object sender, DownloadItem e) { this.UpdateDownloadAction("OnDownloadUpdated", e); } private void UpdateDownloadAction(string downloadAction, DownloadItem downloadItem) { /* this.Dispatcher.Invoke(() => { var viewModel = (BrowserTabViewModel)this.DataContext; viewModel.LastDownloadAction = downloadAction; viewModel.DownloadItem = downloadItem; }); */ } // ... public class DownloadHandler : IDownloadHandler { public event EventHandlerOnBeforeDownloadFired; public event EventHandler OnDownloadUpdatedFired; MainForm mainForm; public DownloadHandler(MainForm form) { mainForm = form; } public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) { var handler = OnBeforeDownloadFired; if (handler != null) { handler(this, downloadItem); } if (!callback.IsDisposed) { using (callback) { callback.Continue(downloadItem.SuggestedFileName, showDialog: true); } } } public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) { var handler = OnDownloadUpdatedFired; if (handler != null) { handler(this, downloadItem); } } } // ...