关于CefSharp使用的一些备忘

核能气质少年 提交于 2019-12-04 02:39:53

相关资料:how-to-use-cefsharp-chromium-embedded-framework-csharp-in-a-winforms-application

     CefSharp中文帮助文档

 

一、安装及设置

1、引入

  通过NuGet package搜索CefSharp (安装:CefSharp.WinForms)

  当前版本:75.1.143,.net框架需要4.5.2或以上

2、建议重启下项目

3、设置any cpu

  1)项目-属性-生成-首选32位

  2)文件<your-project-name>/<your-project-name>/your-project-name.csproj中,第一个<PropertyGroup>节点内,加入<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>

  

  3)App.config文件<configuration>节点内加入  

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="x86"/>
    </assemblyBinding>
</runtime>

 

二、基本使用

public ChromiumWebBrowser chromeBrowser;

public void InitializeChromium()
{
    CefSettings settings = new CefSettings();
    Cef.Initialize( settings );
    chromeBrowser = new ChromiumWebBrowser( "http://www.baidu.com" );
    this.Controls.Add( chromeBrowser );
    chromeBrowser.Dock        = DockStyle.Fill;
    chromeBrowser.FrameLoadStart    += new EventHandler<FrameLoadStartEventArgs>( FrameStartFunction );//加载开始事件
    chromeBrowser.FrameLoadEnd    += new EventHandler<FrameLoadEndEventArgs>( FrameEndFunction );//加载完成事件
}

public Form1()
{
    InitializeComponent();
    InitializeChromium();//初始化浏览器
}

private void UpdateLabel( object str )
{
    if ( label1.InvokeRequired )
    {
        BeginInvoke( new Action<string>( x => { label1.Text = x.ToString(); } ), str );
    }
}

private void FrameEndFunction( object sender, FrameLoadEndEventArgs e )
{
    Thread thread1 = new Thread( UpdateLabel );//由于事件是CEF的UI线程发出的,需要更新应用UI控件需要异步执行委托
    thread1.Start( "加载完成" );
}

private void FrameStartFunction( object sender, FrameLoadStartEventArgs e )
{
    Thread thread1 = new Thread( UpdateLabel );
    thread1.Start( "加载中..." );
}

private void Form1_FormClosing( object sender, FormClosingEventArgs e )
{
    Cef.Shutdown();
}

 

调用JS

string fun="alert('demo')";
Task<CefSharp.JavascriptResponse> t = chromeBrowser.EvaluateScriptAsync(fun);
t.Wait();
if (t.Result.Success == true)
{ 
  //var res=t.Result.Result;
  //t.Result.Result是object类型,如果js返回是一个数组,则是object[];
  //todo
    
}  

 

其他常用备忘

chromeBrowser.Reload();//刷新(会读缓存)
chromeBrowser.Reload(false);//彻底刷新
chromeBrowser.Load("http://www.baidu.com")//加载指定页面
var res =await chromeBrowser.GetSourceAsync();//读取源码

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!