在CefSharp库中是否存在模拟事件WebBrowser.Navigating?

时间:2017-10-08 20:58:34

标签: c# wpf cefsharp

当我点击网站上的下载按钮并立即下载链接时,我需要调用事件。我知道它如何与WebBrowser一起使用:

private void WebBrowser_Navigating(object sender, NavigatingCancelEventArgs e)
{
    string url = e.Uri.ToString();
    if (url.Contains("https://accounts.google.com/AccountChooser") 
    {
        _userAgentController.UserAgentRefresh();
    }

    if (url.Contains("get:")) //specific form of download link
    {
        DownloadModel(url);
    }
}

但是我应该在CefSharp库中使用它并使用使用下载URL的DownloadModel()方法。

我尝试过LoadingChanged和FrameLoadEnd事件,但我无法获得所需的链接。

1 个答案:

答案 0 :(得分:1)

看起来CefSharp为您提供了一个具有回调下载功能的界面。

以下是一个例子:

  public class DownloadHandler : IDownloadHandler
    {
        public event EventHandler<DownloadItem> OnBeforeDownloadFired;

        public event EventHandler<DownloadItem> OnDownloadUpdatedFired;

        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);
            }
        }
    }

从此处开始,下载完成后,您将拥有DownloadItem对象,该对象提供您需要的完整路径:

请参阅此处的课程结构:https://github.com/cefsharp/CefSharp/blob/0a2693fa9ba7273ada5df363bf78e85b5a1a342b/CefSharp/DownloadItem.cs