Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >cefsharp教程_常见的数据分析方法有哪些

cefsharp教程_常见的数据分析方法有哪些

作者头像
全栈程序员站长
发布于 2022-09-29 03:41:48
发布于 2022-09-29 03:41:48
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君

目录

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,并且实现他的接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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;
        }
    }

使用的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chromeBrowser.MenuHandler = new MenuHandler();

2.设置默认语言

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CefSettings settings = new CefSettings();
settings.Locale = "zh-CN";// 设置语言
Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);//以上这段代码一定要在new ChromiumWebBrowser之前调用

3.设置cookie

可以参考下面读取cookie

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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发布成网站,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.效果

所有代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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());
        }
    }

}

三、加载完成后就显示

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  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代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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#中调用

第一种方法

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

第二句是触发文本修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            webBrower.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('myBtn').click();");
            webBrower.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('mytxt').innerHTML='123'");

效果

第二种方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var script = string.Format("document.getElementById('myBtn').click();");
            webBrower.GetMainFrame().ExecuteJavaScriptAsync(script);

6.html调用c#

html代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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#代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 + @".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功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chromeBrowser.ShowDevTools();

8.关闭窗体

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193454.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月15日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
winform与cefsharp混合开发_winform窗体
CefSharp简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。
全栈程序员站长
2022/11/05
3K0
winform与cefsharp混合开发_winform窗体
Cefsharp_ceph nfs
CefSharp,简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。它支持HTML5。 CefSharp的功能比较复杂,以下只介绍一些我觉得比较重要的并且目前经常用的功能。
全栈程序员站长
2022/11/04
1.7K0
Cefsharp_ceph nfs
WPF中使用CEFSharp加载网页及交互
几种方案都各有利弊,可以根据团队的情况选用,都是相对不错的,其他的方案比如Flutter,Java就不太推荐。
码客说
2021/11/01
5K0
WPF中使用CEFSharp加载网页及交互
ManualResetEvent实现线程的暂停与恢复
前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果。当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新。
Chester Chen
2022/08/18
8950
ManualResetEvent实现线程的暂停与恢复
windows_清空listview中的数据
winfrom调用的浏览器默认内核是ie的,这在当下是很受限制的,前几年的webkit还是挺不错的,可惜停止维护和更新了,当下使用webkit不免也有些不兼容;
全栈程序员站长
2022/09/28
1.5K0
windows_清空listview中的数据
CefSharp中文帮助文档「建议收藏」
CefSharp是围绕Chromium嵌入式框架( Chromium Embedded Framework,CEF)的.Net包装器。CEF是一个基于Google Chromium项目的开源项目。与Chromium项目本身(主要专注于Google Chrome应用程序开发)不同,CEF专注于促进第三方应用程序中的嵌入式浏览器用例。 CEF基于多进程Chromium Content API,因此,当前仅存在Chromium的部分功能。例如,对扩展的支持是有限的,仅实现了一部分Extension API。
全栈程序员站长
2022/11/04
14.2K0
使用的winform+cefsharp实现的日常-砍一刀
本人是个由于砍一刀入迷了,每次砍一刀还得召唤亲朋好友,怪麻烦的,后来想到自己弄几个账号相互砍,简直完美的想法。
代码伴一生
2021/09/19
1.1K0
CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」
CefSharp是做什么用的?请看前一篇文章:怎么用c#编写浏览器或者执行javascript代码?
全栈程序员站长
2022/10/02
8870
CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」
CefSharp请求资源拦截及自定义处理
在CefSharp中,我们不仅可以使用Chromium浏览器内核,还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理。
w4ngzhen
2023/10/18
1.5K0
CefSharp请求资源拦截及自定义处理
CefSharp 中过滤图片 RequestHandler
具体内同参照 附录;将 OnBeforeResourceLoad方法替换成2中的内容,很简单;
全栈程序员站长
2022/11/04
9600
cefsharp设置cookie,CefSharp如何存储Cookie
CefSettings settings = new CefSettings();
全栈程序员站长
2022/10/02
4K0
CefSharp中c#和JavaScript交互读取电脑信息
CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目。与主要关注谷歌Chrome应用程序开发的Chromium项目本身不同,CEF专注于在第三方应用程序中促进嵌入式浏览器用例。CEF通过提供生产质量稳定的API,发布跟踪特定Chromium版本和二进制发行版的分支机构,使用户免受基础Chromium和Blink代码复杂性的影响。CEF中的大多数功能都具有默认实现,这些实现提供丰富的功能,同时几乎不需要用户进行集成工作。目前,全球已有超过1亿个CEF安装实例嵌入到来自各种公司和行业的产品中。CEF维基百科页面上提供了使用CEF的公司和产品的部分列表。CEF的一些用例包括:
心莱科技雪雁
2019/04/22
5.3K0
cefsharp文档在哪_hdfs创建目录
参考:https://github.com/cefsharp/CefSharp/issues/601 https://gist.github.com/BlackBooth/19ce027c4f68c1eb4fc1144988ca6662
全栈程序员站长
2022/10/02
1.4K0
cefsharp文档在哪_hdfs创建目录
C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用
  在我的博客《C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案》中介绍了多种集成BIMFACE到客户端程序中的方案。最后推荐大家使用 CefSharp组件与WebView2组件。本篇文章介绍使用CefSharp组件如何集成BIMFACE到客户端程序中。
张传宁IT讲堂
2021/10/21
2.6K0
CefSharp自定义缓存实现
上文介绍了《C# 使用 CefSharp 内嵌网页 - 并给出 C# 与 JS 的交互示例》,本文介绍 CefSharp 的缓存实现,先来说说添加缓存的好处:
沙漠尽头的狼
2023/04/26
1.5K0
C# WPF 嵌入网页版WebGL油田三维可视化监控 0x00 楔子0x01 寂静无声0x02 初步尝试0x03 CefSharp现身0x04
最近做的一个项目,是一个油田三维可视化监控的场景编辑和监控的系统,和三维组态有些类似,不过主要用于油田上。 效果如下图所示:
用户3158888
2020/05/12
3K1
C# WPF 嵌入网页版WebGL油田三维可视化监控
                            0x00 楔子0x01 寂静无声0x02 初步尝试0x03 CefSharp现身0x04
c#使用CefSharp开发winform——环境搭建
最终下载的共4个包,cef.redist64,cef.redist86,cefsharp.common,cefsharp.winforms
code2roc
2023/07/19
7370
c#使用CefSharp开发winform——环境搭建
Visual Studio 2019 集成CefSharp[通俗易懂]
1.点击“引用”,右键”管理Nuget程序包”,搜索框里输入”CefSharp”,选择”CefSharp.WinForms”,安装。
全栈程序员站长
2022/09/30
1.6K0
Visual Studio 2019 集成CefSharp[通俗易懂]
如何解决C#异常:必须先将当前线程设置为单线程单元(STA)模式,然后才能进行OLE调用,请确保你的Main函数已在其上标记了STAThreadAttribute
如果你的应用程序运行一段代码, 该代码触发以下ThreadStateException异常:
跟着阿笨一起玩NET
2021/09/08
3.1K0
[C#] 通过CefSharp在WinForm显示Web内容 ->我和我的父辈1080P下载
《我和我的父辈》是由吴京、章子怡、徐峥、沈腾联合执导的剧情片,该片是继2019年《我和我的祖国》、2020年《我和我的家乡》后,“国庆三部曲”的第三部作品,该片于2021年9月30日在中国大陆上映。该片由《乘风》《诗》《鸭先知》《少年行》四个单元组成,以革命、建设、改革开放和新时代为历史坐标, 通过“家与国”的视角描写几代父辈的奋斗经历,讲述中国人的血脉相连和精神传承,再现中国人努力拼搏的时代记忆。
科控物联
2022/03/29
1.1K0
[C#] 通过CefSharp在WinForm显示Web内容  ->我和我的父辈1080P下载
推荐阅读
相关推荐
winform与cefsharp混合开发_winform窗体
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验