首页 > 其他分享 >CefSharp 实现下载功能

CefSharp 实现下载功能

时间:2022-11-29 16:57:58浏览次数:57  
标签:CefSharp 功能 System callback using public 下载 browser

CefSharp 能 在C# winform 中实现 浏览器 功能

同样的在浏览器中 网页上如果有 下载 按钮 实现下载功能

直接上代码

CefSharp 在winform上实现 浏览器功能

using System;
using System.Text;
using System.Windows.Forms;

using CefSharp;
using CefSharp.WinForms;
public ChromiumWebBrowser browser;
public void InitBrowser()
{
   //Cef.Initialize(new CefSettings());
   browser = new ChromiumWebBrowser("https://ai.12348.gov.cn/pc/");

   browser.LifeSpanHandler = new LifeSpanHandler();//超链接不弹新窗体

   browser.DownloadHandler = new DownloadHandler();//下载

   this.panel1.Controls.Add(browser);//panel
            
}

重点: 创建CustomDownloadHandler类并实现IDownloadHandler接口

创建 DownloadHandler.cs 文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using System.Web.Script.Serialization;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.IO;

namespace LawSever
{
    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)
        {
            //throw new NotImplementedException();
            var handler = OnBeforeDownloadFired;

            if (handler != null)
            {
                handler(this, downloadItem);
            }

            if (!callback.IsDisposed)
            {
                //using (callback)
                //{
                //    callback.Continue(downloadItem.SuggestedFileName, showDialog: true);
                //}
                using (callback)
                {
//好用 downloadItem.SuggestedFileName为下载的文件名 //callback.Continue(@"C:\Users\" + // System.Security.Principal.WindowsIdentity.GetCurrent().Name + @"\Downloads\" + // downloadItem.SuggestedFileName, // showDialog: false); string strDownloadFile = @"c:\DownloadFile\file.docx";//手动指定下载目录和下载文件名 callback.Continue(@strDownloadFile,showDialog: false); } } } public void OnDownloadUpdated(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) { //下载过程中 调用多次 } public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) { //没有被调用 } public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback) { //没有被调用 //var handler = OnDownloadUpdatedFired; //if (handler != null) //{ // handler(this, downloadItem); //} }
} }
超链接不弹新窗体
创建 LifeSpanHandler.cs 文件
using CefSharp;
using CefSharp.WinForms;

namespace LawSever
{
    internal class LifeSpanHandler : ILifeSpanHandler
    {
        //弹出前触发的事件
        public bool OnBeforePopup(IWebBrowser webBrowser, IBrowser browser, IFrame frame, string targetUrl,
            string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
            IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
        {
            //使用源窗口打开链接,取消创建新窗口
            newBrowser = null;
            var chromiumWebBrowser = (ChromiumWebBrowser)webBrowser;
            chromiumWebBrowser.Load(targetUrl);
            return true;
        }

        public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {

        }

        public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
            return true;
        }

        public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {

        }
    }

}

 感谢:

https://www.javaroad.cn/questions/288431

https://www.cnblogs.com/mchao/p/13935777.html



标签:CefSharp,功能,System,callback,using,public,下载,browser
From: https://www.cnblogs.com/hailexuexi/p/16935850.html

相关文章

  • 广东电子MES系统在电子厂实施的功能和流程
    1、电子行业特点电子行业为典型的离散性加工企业,其管理核心的问题在于SN号的管理和物料追溯,即产品、半成品、关键部件都有SN号,且需要实现物料追溯。2、电子行业MES解......
  • 关闭 ORACLE trace 日志功能
    关闭ORACLEtrace日志功能altersystemsettrace_enabled=falseselect*fromv$parameterwhereNAMElike'%trace%'; 关闭ORACLEtrace日志功能altersystem......
  • cmake二进制镜像下载地址
    cmake官网里点击下载是使用github的地址分发,比较慢国内有关于Windows版本的cmake下载镜像地址吗?-林小得的回答-知乎https://www.zhihu.com/question/391315769/answe......
  • 下载vscode并设置中文
    下载vscode下载地址:https://code.visualstudio.com/一路安装,选择在桌面创建快捷方式双击打开设置中文商店搜索Chinese下载ctrl+shift+p搜索configuredis......
  • 团队开发冲刺第八天(实现评论功能)
      昨天在设计评论的UI,以及查阅网址看看如何添加评论今天完成了评论的功能遇到的问题:多线程并发的问题,导致第一次输出评论没有及时的显示在屏幕上,之后在进入该页面时,之前的......
  • WebAPI如何提供下载文件功能
    提问WebAPI如何提供下载文件功能回答//开启目录浏览服务builder.Services.AddDirectoryBrowser();//指定文件目录app.UseFileServer(newFileServerOptions{Fi......
  • ArcGIS QGIS学习二:图层如何只显示需要的部分几何面数据(附最新坐标边界下载全国省市区
    目录前言准备SHP数据ArcMap的筛选QGIS的筛选如何编写查询条件前言当我们用GIS软件打开一个SHP文件的时候,会显示出里面全部的几何图形,假如我只想要其中的一部分数据显示......
  • Java文件下载
    Java文件下载的几种方式publicHttpServletResponsedownload(Stringpath,HttpServletResponseresponse){try{//path是指欲下载的文件的路径。Filefile=newFile(p......
  • 下载kali以及安装
    一、kali下载下载地址:https://www.kali.org/get-kali/#kali-virtual-machines二、kali安装1、打开VMware,打开文件,选择刚刚下载并解压的文件2.启动虚拟机用户名和密......
  • RK系列源码下载-repo下载更新源代码
    repo更新瑞芯微RK35XX源码源码下载:https://en.t-firefly.com/doc/download/94.html一般百度云下载,下载速度之慢,天下人苦百度云久矣啊!源码下载好,需要使用repo更新;使用rep......