一、
CefSharp简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。
https://github.com/cefsharp/CefSharp
二、使用
1.安装,在vs中NuGet搜索CefSharp然后下载安装CefSharp.WinForms和CefSharp.Common;
2.浏览引用 CefSharp.WinForms.dll,CefSharp.Core.dll,CefSharp.dll;
3.将平台换为X86或者X64,Any Cpu无法编译成功;
三、CefSharp 与 js 相互调用,代码举例
using CefSharp; using CefSharp.WinForms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BlockDemo { public partial class FrmMain : Form { private ChromiumWebBrowser chromBrowser; public FrmMain() { InitializeComponent(); InitChromium(); } public void InitChromium() { string strUrl; string currentDir; currentDir = System.Environment.CurrentDirectory; strUrl = "file:///" + currentDir + "/html/index.html"; strUrl = strUrl.Replace('\', '/'); CefSettings settings = new CefSettings(); settings.Locale = "zh-CN"; settings.CefCommandLineArgs.Add("disable-gpu", "1");//去掉gpu,否则chrome显示有问题 Cef.Initialize(settings); chromBrowser = new ChromiumWebBrowser(strUrl); BrowserSettings browserSettings = new BrowserSettings(); browserSettings.FileAccessFromFileUrls = CefState.Enabled; browserSettings.UniversalAccessFromFileUrls = CefState.Enabled; chromBrowser.BrowserSettings = browserSettings; panel1.Controls.Add(chromBrowser); chromBrowser.Dock = DockStyle.Fill; CefSharpSettings.LegacyJavascriptBindingEnabled = true;//新cefsharp绑定需要优先申明 chromBrowser.RegisterJsObject("jsObj", new JsEvent(), new CefSharp.BindingOptions() { CamelCaseJavascriptNames = false }); } private void FrmMain_Load(object sender, EventArgs e) { } private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) { chromBrowser.Dispose(); chromBrowser = null; CefSharp.Cef.Shutdown(); } private void btnEvaluateScript_Click(object sender, EventArgs e) { Task<CefSharp.JavascriptResponse> t = chromBrowser.EvaluateScriptAsync("get_test(1,99)"); // 等待js 方法执行完后,获取返回值 t.Wait(); // t.Result 是 CefSharp.JavascriptResponse 对象 // t.Result.Result 是一个 object 对象,来自js的 get_test() 方法的返回值 if (t.Result.Result != null) { MessageBox.Show(t.Result.Result.ToString()); } } } public class JsEvent { public string MessageText { get; set; } public void ShowTest() { MessageBox.Show("this in C#. " + MessageText); } } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> <title>Bootstrap 101 Template</title> <!-- Bootstrap --> <link href="bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <h1>Hello, world!</h1> <div><button type="button" onclick="test()">Test</button></div> <div><label id="msg"></label></div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="jquery-3.4.1.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> <script type="text/javascript"> function test(){ jsObj.MessageText = "我是js"; jsObj.ShowTest(); $("#msg").text("调用C#里函数"); } function get_test(a,b){ $("#msg").text(a+b); return a+b; } </script </body> </html>