相关资料:how-to-use-cefsharp-chromium-embedded-framework-csharp-in-a-winforms-application
一、安装及设置
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();//读取源码