C#使用[CefSharp]Chrome浏览器(1)-安装
0. 前言
由于项目需要,众所周知,PC端软件的界面UI令人堪忧。之前使用过Qt,C#都不尽人意。而且对应的界面库也不多,很多还是收费的。
有没有一种可能,就是基于Web的开源生态,开发一些桌面工作呢,目前有Electron,这个用的人比较多。这个有个缺点就是,如果涉及到与硬件或操作系统之类进行交互的时候,就没有C#或者QT那样方便。特别是调用动态库之类的。
C#通过CefSharp,引入一个Chrome内核,使其能使用Web来画界面,然后用C#来实现对应的功能。
1. 新建C#(.Net)项目
目标框架选择.net framework 4.6
2. 通过Nuget应用CefSharp
目标平台要进行选择,不能是any cpu
安装以下必要的依赖包
拖动一个Web控件到界面上
3. 编写代码,加载Html文件
1 using CefSharp; 2 using CefSharp.WinForms; 3 using System; 4 using System.Collections.Generic; 5 using System.ComponentModel; 6 using System.Data; 7 using System.Drawing; 8 using System.Linq; 9 using System.Text; 10 using System.Windows.Forms; 11 12 namespace CefTools 13 { 14 public partial class Form : System.Windows.Forms.Form 15 { 16 public Form() 17 { 18 InitializeComponent(); 19 20 //访问连接不安全网页时不显示的问题 21 var setting = new CefSettings(); 22 setting.CefCommandLineArgs.Add("--ignore-urlfetcher-cert-requests", "1"); 23 setting.CefCommandLineArgs.Add("--ignore-certificate-errors", "1"); 24 //setting.LogSeverity = LogSeverity.Disable; 25 Cef.Initialize(setting); 26 27 BrowserSettings bsetting = new BrowserSettings(); 28 web.BrowserSettings = bsetting; 29 30 this.web.AllowDrop = false; 31 this.web.Dock = DockStyle.Fill; 32 33 this.web.LoadUrl("file:///./test/test.html"); 34 35 //JS调用C# 36 web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true; //启用运行JS调用C#代码 37 CefSharpSettings.WcfEnabled = true; 38 web.JavascriptObjectRepository.Register("bound", new Bound(), isAsync: false, options: BindingOptions.DefaultBinder); 39 } 40 41 private void btn_Click(object sender, EventArgs e) 42 { 43 //C#调用JS 44 web.ExecuteScriptAsync("alert('C#调用JS')"); 45 web.ShowDevTools(); 46 } 47 } 48 class Bound 49 { 50 public string val { get; set; } 51 public void print() 52 { 53 Console.WriteLine("Bound Val: " + val); 54 val = "update"; 55 } 56 //获取当前目录下文件 57 public void getDirectoryList(IJavascriptCallback callback) 58 { 59 Task.Factory.StartNew(async () => 60 { 61 DirectoryInfo folder = new DirectoryInfo("."); 62 if (!folder.Exists) 63 { 64 await callback.ExecuteAsync(null); 65 } 66 DirectoryInfo[] infos = folder.GetDirectories(); 67 List<string> list = new List<string>(); 68 for (int i = 0; i < infos.Length; i++) 69 { 70 Console.WriteLine(infos[i].Name); 71 list.Add(infos[i].Name); 72 } 73 await callback.ExecuteAsync(list); 74 }); 75 } 76 } 77 }
4. C#调用JS
5. JS调用C#
本文地址:https://www.cnblogs.com/wunaozai/p/15872741.html
个人主页:https://www.wunaozai.com/
作者:无脑仔的小明 出处:http://www.cnblogs.com/wunaozai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。有需要沟通的,可以站内私信,文章留言,或者关注“无脑仔的小明”公众号私信我。一定尽力回答。 |