目录

1.取消右键功能

2.设置默认语言

3.设置cookie

4.读取cookie

5.c#调用js

6.html调用c#

7. 模拟调用调试F12功能

8.关闭窗体

9.cefsharp中文文档参考


本节汇总一些关于cefsharp的使用方法,包括c#调用HTML页面中的js,也可以是HTML中的按钮调用c#的方法。汇总后,方便以后使用和查看。

1.取消右键功能

建立MenuHandler类,继承cef中的IContextMenuHandler,并且实现他的接口

 public class MenuHandler : IContextMenuHandler{void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model){model.Clear();}bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags){//throw new NotImplementedException();return false;}void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame){//throw new NotImplementedException();}bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback){return false;}}

使用的时候

chromeBrowser.MenuHandler = new MenuHandler();

2.设置默认语言

CefSettings settings = new CefSettings();
settings.Locale = "zh-CN";// 设置语言
Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);//以上这段代码一定要在new ChromiumWebBrowser之前调用

3.设置cookie

可以参考下面读取cookie

    var cookieManager = CefSharp.Cef.GetGlobalCookieManager();cookieManager.SetCookieAsync("http://localhost", new CefSharp.Cookie(){Domain = "localhost",           //这里是localhost,就会出现设置的值和HTML中的值Name = "1",Value = "2",Expires = DateTime.MinValue});

4.读取cookie

一般来说,cookie都是浏览器设置好了,所以,可以直接读取cookie。

一、使用js读取

1.HTML

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title></title>
</head>
<body>this is page 111<br><a href="page4.html">to page4</a><script language=javascript>document.cookie="username=Tom&age=22";</script>
</body>
</html>

2.先把HTML发布成网站,代码如下

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace cef
{public partial class Form1 : Form{ChromiumWebBrowser webBrower = null;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//初始化配置string path = "http://localhost/1.html";webBrower = new ChromiumWebBrowser(path);webBrower.Dock = DockStyle.Fill;// 填充方式this.Controls.Add(webBrower);}private void button2_Click(object sender, EventArgs e){Task<CefSharp.JavascriptResponse> t = webBrower.EvaluateScriptAsync("document.cookie");t.Wait();var cookie = t.Result.Result;MessageBox.Show(cookie.ToString());}}}

二、使用cefsharp读取

1.load中载入

 2.WebBrower_FrameLoadEnd事件

 3.回调

 4.建立Cookie读取对象,继承接口 ICookieVisitor

5.效果

所有代码

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace cef
{public partial class Form1 : Form{ChromiumWebBrowser webBrower = null;string cookies;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//初始化配置string path = "http://localhost/1.html";webBrower = new ChromiumWebBrowser(path);webBrower.Dock = DockStyle.Fill;// 填充方式webBrower.FrameLoadEnd += WebBrower_FrameLoadEnd;this.Controls.Add(webBrower);//加载测试页面webBrower.Load("http://localhost/1.html");//模拟写入cookie(测试页面,也有一个cookie)var cookieManager = CefSharp.Cef.GetGlobalCookieManager();cookieManager.SetCookieAsync("http://localhost", new CefSharp.Cookie(){Domain = "localhost",           //这里是localhost,就会出现设置的值和HTML中的值Name = "1",Value = "2",Expires = DateTime.MinValue});}private void WebBrower_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){ICookieManager cookieManager = webBrower.GetCookieManager();CookieVisitor visitor = new CookieVisitor();visitor.SendCookie += visitor_SendCookie;cookieManager.VisitAllCookies(visitor);}private void visitor_SendCookie(CefSharp.Cookie obj){cookies += obj.Domain.TrimStart('.') + "^" + obj.Name + "^" + obj.Value + "\r\n";}public class CookieVisitor : CefSharp.ICookieVisitor{public event Action<CefSharp.Cookie> SendCookie;public void Dispose(){}public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie){deleteCookie = false;if (SendCookie != null){SendCookie(cookie);}return true;}}private void button2_Click(object sender, EventArgs e){MessageBox.Show(cookies.ToString());}}}

三、加载完成后就显示

 代码:

  public Action GetCookie;    private void Form1_Load(object sender, EventArgs e){ GetCookie = () =>{Task<CefSharp.JavascriptResponse> t =                 webBrower.EvaluateScriptAsync("document.cookie");t.Wait();var cookie = t.Result.Result;this.button2.Text = cookie.ToString();};}
private void WebBrower_FrameLoadEnd(object sender, FrameLoadEndEventArgs e){//写后面this.BeginInvoke(GetCookie);}

5.c#调用js

使用c#触发HTML中的js。

HTML代码:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title></title>
</head>
<body><p>点击按钮执行 <em>displayDate()</em> 函数.</p><button id="myBtn">点这里</button><p id="mytxt">213213</p><script>document.getElementById("myBtn").onclick = function () { displayDate() };function displayDate() {document.getElementById("demo").innerHTML = Date();}</script><p id="demo"></p>
</body>
</html>

效果是:

c#中调用

第一种方法

第一句是触发点击按钮事件。

第二句是触发文本修改。

            webBrower.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('myBtn').click();");webBrower.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('mytxt').innerHTML='123'");

效果

第二种方法

            var script = string.Format("document.getElementById('myBtn').click();");webBrower.GetMainFrame().ExecuteJavaScriptAsync(script);

6.html调用c#

html代码

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title>dd</title>
</head>
<body><button onclick="AAA.aa()">html调用C#</button>
</body>
</html>

c#代码

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace cef
{public partial class Form1 : Form{private ChromiumWebBrowser chromeBrowser;public Form1(){InitializeComponent();InitializeChromium();}public void InitializeChromium(){string indexpage = AppDomain.CurrentDomain.BaseDirectory + @"\1.html";chromeBrowser = new ChromiumWebBrowser(indexpage);this.Controls.Add(chromeBrowser);chromeBrowser.Dock = DockStyle.Fill;CefSharpSettings.LegacyJavascriptBindingEnabled = true;CefSharpSettings.WcfEnabled = true;chromeBrowser.JavascriptObjectRepository.Register("AAA", new CefCustomObject(), isAsync: false, options: BindingOptions.DefaultBinder);}}public class CefCustomObject{public void aa(){MessageBox.Show("注意方法的命名,坑很多!!!");}}}

效果

注意: 这里调用的方法名称,aa(),之前我写show(),show好像是关键字,一直触发不了,非常的坑人!!!

7. 模拟调用调试F12功能

chromeBrowser.ShowDevTools();

8.关闭窗体

 try{_instanceBrowser.CloseDevTools();_instanceBrowser.GetBrowser().CloseBrowser(true);}catch { }try{if (_instanceBrowser != null){_instanceBrowser.Dispose();}}catch { }if (!_instanceMainForm.IsDisposed && _instanceMainForm.IsHandleCreated){var result = _instanceMainForm.BeginInvoke(new Action(() =>{if (_instanceMainForm != null && !_instanceMainForm.IsDisposed){_instanceMainForm.Close();_instanceMainForm.Dispose();}}));_instanceMainForm.EndInvoke(result);}

9.cefsharp中文文档参考

这是GitHub上面的文档,其中有些不对,可能和版本有关系

CefSharp中文帮助文档 · cefsharp/CefSharp Wiki · GitHub

CefSharp方法汇总相关推荐

  1. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  2. 二、深度学习数据增强方法汇总

    深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...

  3. 特征点匹配+特征检测方法汇总

    特征点匹配+特征检测方法汇总 特征提取与匹配---SURF:SIFT:ORB:FAST:Harris角点 匹配方法 匹配函数 1. OpenCV提供了两种Matching方式: • Brute-for ...

  4. 统计计量 | 统计学中常用的数据分析方法汇总

    来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...

  5. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  6. IE问题解决方法汇总

    1.发送错误报告 [故障现象]在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭--"的信息提示.此时,如果单击"发 ...

  7. winform打开cad图纸_CAD打开图纸的方法汇总

    打开文件属于最基本的操作,大家都会,但每个人的习惯不一样,采用的方法也不完全相同,这里简单地将打开文件的各种方法汇总一下. 一.打开(OPEN)命令 这是最基本也是最常用的方法,但调用方法有很多种,可 ...

  8. js解决异步的方法汇总

    js解决异步的方法汇总 参考文章: (1)js解决异步的方法汇总 (2)https://www.cnblogs.com/yunshangwuyou/p/9631914.html 备忘一下.

  9. ES shard unassigned的解决方法汇总

    ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...

  10. 共享打印机出错,错误代码0x00000bcb解决方法汇总

    共享打印机出错,错误代码0x00000bcb解决方法汇总 参考文章: (1)共享打印机出错,错误代码0x00000bcb解决方法汇总 (2)https://www.cnblogs.com/xknigh ...

最新文章

  1. oracle bulk collect
  2. zabbix登山路——简单监控_各项参数解析
  3. setcookie无效
  4. excel中$、、^、/、*等各种符号的使用
  5. 哈尔滨工业大学(深圳)姜欣副教授课题组招收客座硕士-机器人方向
  6. maven docker 插件集成的几个小坑
  7. Fiddler及浏览器开发者工具进行弱网测试
  8. 面试—每日一题(5)
  9. 在腾讯云 EMR 上使用 GooseFS 加速大数据计算服务
  10. (一)从零开始学习模糊控制——基本概念
  11. chrome插件开发(Demo案例)
  12. 新型养老机构的“智安”神器 | ​钛颐康智慧养老物联网平台
  13. 不用传感器的指南针android app,Android 利用方向传感器实现指南针具体步骤
  14. 数据中心IDC产业研究报告:碳中和背景下,IDC产业链的破局之路
  15. 一文带你了解降压型稳压芯片原理
  16. 美联储加息75个基点释放什么信号?对我们有什么影响
  17. 130 个相见恨晚的超实用网站
  18. 什么是漏洞?最全的漏洞分类!
  19. python实验六到十二作业(待完善)
  20. Android:高德SDK的基本使用

热门文章

  1. FastReport.NET v2022.2.7
  2. 苹果id登陆不上去怎么回事_创建苹果id是出现请联络iTunes支持人员完成交易是怎么回事?...
  3. mysql数据库实验4
  4. KindEditor的简单应用
  5. java fastfds操作文件
  6. mw150um 驱动程序win10_水星MW150UM 1.0无线网卡驱动
  7. C# winform推荐波形图表控件scottplot
  8. 【UWB 定位】室内定位 三边定位算法
  9. php 抽签,javascript随机抽签程序
  10. 网络安全等级保护-信息安全管理制度汇编参考