21
2021
04

WPF下cef.sharp的使用

使用

使用时可以直接在xaml文件中直接添加ChromiumWebBrowser控件,不过ChromiumWebBrowser控件特别消耗内存,所以代码里动态添加也是一种不错的选择。


在xaml中添加浏览器

xmal文件头部插入引用xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf",添加控件如下:

<Grid x:Name="ctrlBrowerGrid">
    <wpf:ChromiumWebBrowser x:Name="Browser"/>
</Grid>


cs文件中操作控件访问网址:

Browser.Load(“www.baidu.com”);


动态添加浏览器

添加浏览器类:

internal sealed class CollapsableChromiumWebBrowser : ChromiumWebBrowser

{

    public CollapsableChromiumWebBrowser()

    {

        this.Loaded += this.BrowserLoaded;

    }


    private void BrowserLoaded(object sender, System.Windows.RoutedEventArgs e)

    {

        // Avoid loading CEF in designer

        if (DesignerProperties.GetIsInDesignMode(this))

            return;

        // Avoid NRE in AbstractRenderHandler.OnPaint

        ApplyTemplate();

        CreateOffscreenBrowser(new Size(400, 400));

    }

}


动态添加和操作控件:

CollapsableChromiumWebBrowser Browser = new CollapsableChromiumWebBrowser();

//页面插入控件

ctrlBrowerGrid.Children.Add(Browser);

//这里不能用Load()的方法,会报错。

Browser.Address = “www.baidu.com”; 


获取Cookie和Html

添加Cookie访问类

public class CookieVisitor : ICookieVisitor

{

    public static string Cookies = null;

    public static string Html = null;

    public event Action<object> Action;

    public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie)

    {

        if(count == 0)

            Cookies = null;

        

        Cookies += cookie.Name + "=" + cookie.Value + ";";

        deleteCookie = false;

        return true;

    }


    public void Dispose() 

    {

        if (Action != null)

            Action((Html, Cookies));

        return;

    }

}


添加Cookie和Html获取回调函数

public async void RecieveCookie(object data)

{

    (string html,string cookies) = ((string,string))data;

    return;

}


浏览器控件访问网址,并设置回调

async void LoadWebBrowser()

{

    Browser.FrameLoadEnd += Browser_FrameLoadEnd;

    Browser.Address = "www.baidu.com";

}


private async void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)

{

    CookieVisitor.Html = await Browser.GetSourceAsync();

    CookieVisitor visitor = new CookieVisitor();

    visitor.Action += RecieveCookie;

    Cef.GetGlobalCookieManager().VisitAllCookies(visitor);

    return;

}

————————————————

版权声明:本文为CSDN博主「yaronzz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u014541617/article/details/107772258

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。