• 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/

  • 相关阅读:
    js sort方法根据数组中对象的某一个属性值进行排序
    ES6之Array.from()方法
    windows安装gnvm安装教程,node多版本解决方案
    Singleton模式的两种实现形式
    java 一组数随机组合求和等于目标数
    与公式相关的代码片段
    项目总结【Excel中附件导出和导入】
    Hook钩子C#实例
    网上以讹传讹的逻辑推理题:电影票问题
    原创:仿AspNetPager写的JS分页控件,适合ajax调用
  • 原文地址:https://www.cnblogs.com/wunaozai/p/15872741.html
Copyright © 2020-2023  润新知