用cefsharp winforms下载文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用cefsharp winforms下载文件相关的知识,希望对你有一定的参考价值。
我正在尝试使用cefsharp winforms从我的应用程序下载一些文件(图像,文件音频或其他内容)。我读了其他任何帖子,但似乎没什么用。你有没有示例代码向我展示如何实现cefsharp的下载程序?
当然,当我现在尝试下载一些文件时,没有任何反应。
谢谢
要解决这个问题,只需下载类DownloadHandler.cs找到here.
之后,将其导入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 EventHandler<DownloadItem> OnBeforeDownloadFired;
public event EventHandler<DownloadItem> 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);
}
}
}
// ...
以上是关于用cefsharp winforms下载文件的主要内容,如果未能解决你的问题,请参考以下文章
用Html5/CSS3做Winform,一步一步教你搭建CefSharp开发环境(附JavaScript异步调用C#例子,及全部源代码)上
WinForm窗体程序中使用CefSharp获取加载后的资源截取request参数拦截response数据注入jquery文件和js代码-拦截response数据
WinForm窗体程序中使用CefSharp获取加载后的资源截取request参数拦截response数据注入jquery文件和js代码-截取request参数