关于CefSharp使用的一些备忘

相关资料: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>

二、基本使用

1、初始化及加载

public ChromiumWebBrowser chromeBrowser;

public void InitializeChromium()
{
    CefSettings settings = new CefSettings();
settings.Locale = "zh-CN";//界面中文化,例如右键菜单
settings.AcceptLanguageList="zh-CN";//HTTP Header Accept-Language 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(); }

 2、调用JS

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

 3、其他常用备忘

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

猜你喜欢

转载自www.cnblogs.com/new-class/p/11828722.html
今日推荐