CefSharp方法汇总
目录
1.取消右键功能
2.设置默认语言
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方法汇总相关推荐
- 用python下载文件的若干种方法汇总
压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...
- 二、深度学习数据增强方法汇总
深度学习模型训练数据增强方法汇总 一.随机裁剪 二.RGB-->BGR通道互换 三.仿射变换(缩放) 三.随机旋转 四.对比度调整 五.随机抠图 六.bound box 中心点随机抠图 七.随机 ...
- 特征点匹配+特征检测方法汇总
特征点匹配+特征检测方法汇总 特征提取与匹配---SURF:SIFT:ORB:FAST:Harris角点 匹配方法 匹配函数 1. OpenCV提供了两种Matching方式: • Brute-for ...
- 统计计量 | 统计学中常用的数据分析方法汇总
来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...
- js如何操作表格(常用属性方法汇总)
js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...
- IE问题解决方法汇总
1.发送错误报告 [故障现象]在使用IE浏览网页的过程中,出现"Microsoft Internet Explorer遇到问题需要关闭--"的信息提示.此时,如果单击"发 ...
- winform打开cad图纸_CAD打开图纸的方法汇总
打开文件属于最基本的操作,大家都会,但每个人的习惯不一样,采用的方法也不完全相同,这里简单地将打开文件的各种方法汇总一下. 一.打开(OPEN)命令 这是最基本也是最常用的方法,但调用方法有很多种,可 ...
- js解决异步的方法汇总
js解决异步的方法汇总 参考文章: (1)js解决异步的方法汇总 (2)https://www.cnblogs.com/yunshangwuyou/p/9631914.html 备忘一下.
- ES shard unassigned的解决方法汇总
ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...
- 共享打印机出错,错误代码0x00000bcb解决方法汇总
共享打印机出错,错误代码0x00000bcb解决方法汇总 参考文章: (1)共享打印机出错,错误代码0x00000bcb解决方法汇总 (2)https://www.cnblogs.com/xknigh ...
最新文章
- oracle bulk collect
- zabbix登山路——简单监控_各项参数解析
- setcookie无效
- excel中$、、^、/、*等各种符号的使用
- 哈尔滨工业大学(深圳)姜欣副教授课题组招收客座硕士-机器人方向
- maven docker 插件集成的几个小坑
- Fiddler及浏览器开发者工具进行弱网测试
- 面试—每日一题(5)
- 在腾讯云 EMR 上使用 GooseFS 加速大数据计算服务
- (一)从零开始学习模糊控制——基本概念
- chrome插件开发(Demo案例)
- 新型养老机构的“智安”神器 | ​钛颐康智慧养老物联网平台
- 不用传感器的指南针android app,Android 利用方向传感器实现指南针具体步骤
- 数据中心IDC产业研究报告:碳中和背景下,IDC产业链的破局之路
- 一文带你了解降压型稳压芯片原理
- 美联储加息75个基点释放什么信号?对我们有什么影响
- 130 个相见恨晚的超实用网站
- 什么是漏洞?最全的漏洞分类!
- python实验六到十二作业(待完善)
- Android:高德SDK的基本使用
热门文章
- FastReport.NET v2022.2.7
- 苹果id登陆不上去怎么回事_创建苹果id是出现请联络iTunes支持人员完成交易是怎么回事?...
- mysql数据库实验4
- KindEditor的简单应用
- java fastfds操作文件
- mw150um 驱动程序win10_水星MW150UM 1.0无线网卡驱动
- C# winform推荐波形图表控件scottplot
- 【UWB 定位】室内定位 三边定位算法
- php 抽签,javascript随机抽签程序
- 网络安全等级保护-信息安全管理制度汇编参考