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/

posted @ 2022-02-09 08:28  无脑仔的小明  阅读(725)  评论(0编辑  收藏  举报