Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Cefsharp_ceph nfs

Cefsharp_ceph nfs

作者头像
全栈程序员站长
发布于 2022-11-04 13:23:17
发布于 2022-11-04 13:23:17
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

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

文章目录

0. 简介

CefSharp,简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。它支持HTML5。 CefSharp的功能比较复杂,以下只介绍一些我觉得比较重要的并且目前经常用的功能。

1. 安装

CefSharp的安装过程如下:

  1. 打开Visual Stduio,新建一个Windows窗体应用(.NET Framework)
  2. 在“工具”菜单打开NuGet包管理器
  3. 搜索“CefSharp.WinForms”进行安装;
  4. CefSharp不能在“Any CPU”平台上运行,需要配置。打开“配置管理器”;
  1. 新建“x86”和“x64”两个平台。从理论上来说使用x86或者x64平台都行,但由于之后要使用编译好的支持h264的x86内核,因此此处选择x86平台;
  1. 在 Form1.cs 中添加如下代码;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms;
namespace WindowsFormsApp8 { 

public partial class Form1 : Form { 

ChromiumWebBrowser browser;
public void InitBrowser() { 

CefSettings settings = new CefSettings();
// Note that if you get an error or a white screen, you may be doing something wrong !
// Try to load a local file that you're sure that exists and give the complete path instead to test
// for example, replace page with a direct path instead :
// String page = @"C:\Users\SDkCarlos\Desktop\afolder\index.html";
// String page = string.Format(@"{0}\html-resources\html\index.html", Application.StartupPath);
String url = "http://www.html5test.com";
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
browser = new ChromiumWebBrowser(url);
// Add it to the form and fill it to the form window.
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
// Allow the use of local resources in the browser
BrowserSettings browserSettings = new BrowserSettings();
browserSettings.FileAccessFromFileUrls = CefState.Enabled;
browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
browser.BrowserSettings = browserSettings;
}
public Form1() { 

InitializeComponent();
InitBrowser();
}
}
}
  1. 调试程序,发现窗口有白边,原因是没有设置高分屏适配,按照C# WinForm程序设计的第1.3节的方法设置即可;
  2. 调试程序,得到最终效果。

2. H.264支持

默认情况下,CefSharp是不支持H.264的,因此不可以进行视频播放。为了使其支持视频播放,需要修改其内核文件,操作步骤如下: 注:请确保安装的CefSharp.WinForms是79.1.360版本的!

  1. 下载我的老师(感谢他!)编译好的支持H264的内核文件 libcef.dll ; 链接:下载地址 提取码:8q2u
  2. 用其替换packages目录下的同名文件;
  1. 调试程序,查看效果。显然浏览器已支持H.264。

3. 加载本地HTML文件

除了使用CefSharp浏览器访问网络地址,还有一个重要的用途就是访问本地文件。 首先将需要用到的HTML和其他静态文件拷贝到工程目录,并设置“复制到输出目录”:

然后编写如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CefSharp;
using CefSharp.WinForms;
using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp8 { 

public partial class Form1 : Form { 

ChromiumWebBrowser browser;
public void InitBrowser() { 

CefSettings settings = new CefSettings();
// Note that if you get an error or a white screen, you may be doing something wrong !
// Try to load a local file that you're sure that exists and give the complete path instead to test
// for example, replace page with a direct path instead :
// String page = @"C:\Users\SDkCarlos\Desktop\afolder\index.html";
// String page = string.Format(@"{0}\html-resources\html\index.html", Application.StartupPath);
String url = string.Format(@"{0}\ui\test.html", Application.StartupPath);
if (!File.Exists(url)) { 

MessageBox.Show("Error: File doesn't exists : " + url);
}
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
browser = new ChromiumWebBrowser(url);
// Add it to the form and fill it to the form window.
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
// Allow the use of local resources in the browser
BrowserSettings browserSettings = new BrowserSettings();
browserSettings.FileAccessFromFileUrls = CefState.Enabled;
browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
browser.BrowserSettings = browserSettings;
}
public Form1() { 

InitializeComponent();
InitBrowser();
}
}
}

调试程序,可以看到效果:

4. 多个窗口显示浏览器

如果有多个窗口都需要显示浏览器,每个窗口的代码并不完全相同。 主窗口的代码如上一节所示,新的窗口的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.IO;
namespace WindowsFormsApp8 { 

public partial class Form2 : Form { 

ChromiumWebBrowser browser;
public void InitBrowser() { 

String url = string.Format(@"{0}\ui\test.html", Application.StartupPath);
if (!File.Exists(url)) { 

MessageBox.Show("Error: File doesn't exists : " + url);
}
browser = new ChromiumWebBrowser(url);
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
}
public Form2() { 

InitializeComponent();
InitBrowser();
}
}
}

显然,与主窗口的区别是去掉了“Cef.Initialize()”部分。 运行效果如下:

5. 执行JavaScript代码

如果需要通过程序控制网页的显示、流程,最明显的方法莫过于执行JavaScript代码了。特别是如果使用Vue.js框架,那么通过JS可以实现“模板渲染”的功能。以下展示了一个示例。 注意:ExecuteScriptAsync()方法是异步执行的,程序并不会阻塞!

  1. 编辑HTML文件(Vue.js框架),增加函数接口;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script> const vue = new Vue({ 
 el: '#app', data: { 
 title: '标题1', }, }); function changeTitle(title) { 
 vue.title = title; } </script>
  1. 编写C#代码,请注意两处中文注释的部分;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CefSharp;
using CefSharp.WinForms;
using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp8 { 

public partial class Form1 : Form { 

ChromiumWebBrowser browser;
public void InitBrowser() { 

CefSettings settings = new CefSettings();
// Note that if you get an error or a white screen, you may be doing something wrong !
// Try to load a local file that you're sure that exists and give the complete path instead to test
// for example, replace page with a direct path instead :
// String page = @"C:\Users\SDkCarlos\Desktop\afolder\index.html";
// String page = string.Format(@"{0}\html-resources\html\index.html", Application.StartupPath);
String url = string.Format(@"{0}\ui\test.html", Application.StartupPath);
if (!File.Exists(url)) { 

MessageBox.Show("Error: File doesn't exists : " + url);
}
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
browser = new ChromiumWebBrowser(url);
// Add it to the form and fill it to the form window.
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
// Allow the use of local resources in the browser
BrowserSettings browserSettings = new BrowserSettings();
browserSettings.FileAccessFromFileUrls = CefState.Enabled;
browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
browser.BrowserSettings = browserSettings;
// 当页面加载完毕时,执行JavaScript代码
browser.ExecuteScriptAsyncWhenPageLoaded("changeTitle('我不是鸭鸭')");
}
public Form1() { 

InitializeComponent();
InitBrowser();
}
private void button1_Click(object sender, EventArgs e) { 

// 当点击按钮时,执行JavaScript代码
browser.ExecuteScriptAsync("changeTitle('我是鸭鸭')");
}
}
}
  1. 调试程序,查看效果。

如果需要执行JavaScript代码并得到返回值,代码可以这么编写: 注意:EvaluateScriptAsync()方法是同步执行的,也就是程序会阻塞!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void button1_Click(object sender, EventArgs e) { 

// 当点击按钮时,执行JavaScript代码
Task<JavascriptResponse> response = browser.EvaluateScriptAsync("add(1, 2)");
// response.Result.Result是Object类型
MessageBox.Show("返回值为:" + response.Result.Result);
}

JavaScript代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function add(a, b) { 

for (var i = 0; i < 9999999999; ++i) { 

;
}
return a + b;
}

6. 在JS中调用C#方法

在C#中编写如下代码:(注意中文注释的部分) 以下是同步执行的演示,即JS会阻塞等待C#执行完再继续执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CefSharp;
using CefSharp.WinForms;
using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp8 { 

public partial class Form1 : Form { 

ChromiumWebBrowser browser;
// 创建一个类,用于在JS中访问
public class JsEvent { 

public void SayHello() { 

MessageBox.Show("你好,C#!");
}
}
public void InitBrowser() { 

CefSettings settings = new CefSettings();
// Note that if you get an error or a white screen, you may be doing something wrong !
// Try to load a local file that you're sure that exists and give the complete path instead to test
// for example, replace page with a direct path instead :
// String page = @"C:\Users\SDkCarlos\Desktop\afolder\index.html";
// String page = string.Format(@"{0}\html-resources\html\index.html", Application.StartupPath);
String url = string.Format(@"{0}\ui\test.html", Application.StartupPath);
if (!File.Exists(url)) { 

MessageBox.Show("Error: File doesn't exists : " + url);
}
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
browser = new ChromiumWebBrowser(url);
// Add it to the form and fill it to the form window.
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
// Allow the use of local resources in the browser
BrowserSettings browserSettings = new BrowserSettings();
browserSettings.FileAccessFromFileUrls = CefState.Enabled;
browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
browser.BrowserSettings = browserSettings;
// 绑定JavaScript对象
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefSharpSettings.WcfEnabled = true;
BindingOptions bindingOptions = new BindingOptions();
// 如果不加此句,那么绑定的方法不能以大写字母开头
bindingOptions.CamelCaseJavascriptNames = false;
browser.JavascriptObjectRepository.Register("jsObj", new JsEvent(), isAsync: false, options: bindingOptions);
}
public Form1() { 

InitializeComponent();
InitBrowser();
}
}
}

在HTML中编写如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="./index.css" rel="stylesheet">
<script src="./vue.min.js"></script>
<script src="./index.js"></script>
</head>
<body>
<div id="app">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>{
{ title }}</span>
<el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
</div>
<div v-for="o in 4" :key="o" class="text item">
{
{ '列表内容 ' + o }}
</div>
</el-card>
<el-button @click="onclick">触发</el-button>
</div>
<script> const vue = new Vue({ 
 el: '#app', data: { 
 title: '标题1', }, methods: { 
 onclick: function () { 
 jsObj.sayHello(); console.log('调用完毕!'); } }, }); </script>
</body>
</html>

运行效果:

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
winform与cefsharp混合开发_winform窗体
CefSharp简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。
全栈程序员站长
2022/11/05
3K0
winform与cefsharp混合开发_winform窗体
CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」
CefSharp是做什么用的?请看前一篇文章:怎么用c#编写浏览器或者执行javascript代码?
全栈程序员站长
2022/10/02
8800
CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」
[C#] 通过CefSharp在WinForm显示Web内容 ->我和我的父辈1080P下载
《我和我的父辈》是由吴京、章子怡、徐峥、沈腾联合执导的剧情片,该片是继2019年《我和我的祖国》、2020年《我和我的家乡》后,“国庆三部曲”的第三部作品,该片于2021年9月30日在中国大陆上映。该片由《乘风》《诗》《鸭先知》《少年行》四个单元组成,以革命、建设、改革开放和新时代为历史坐标, 通过“家与国”的视角描写几代父辈的奋斗经历,讲述中国人的血脉相连和精神传承,再现中国人努力拼搏的时代记忆。
科控物联
2022/03/29
1.1K0
[C#] 通过CefSharp在WinForm显示Web内容  ->我和我的父辈1080P下载
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.1K0
cefsharp教程_常见的数据分析方法有哪些
本节汇总一些关于cefsharp的使用方法,包括c#调用HTML页面中的js,也可以是HTML中的按钮调用c#的方法。汇总后,方便以后使用和查看。
全栈程序员站长
2022/09/29
1.9K0
cefsharp教程_常见的数据分析方法有哪些
使用的winform+cefsharp实现的日常-砍一刀
本人是个由于砍一刀入迷了,每次砍一刀还得召唤亲朋好友,怪麻烦的,后来想到自己弄几个账号相互砍,简直完美的想法。
代码伴一生
2021/09/19
1K0
windows_清空listview中的数据
winfrom调用的浏览器默认内核是ie的,这在当下是很受限制的,前几年的webkit还是挺不错的,可惜停止维护和更新了,当下使用webkit不免也有些不兼容;
全栈程序员站长
2022/09/28
1.5K0
windows_清空listview中的数据
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
C# WPF 嵌入网页版WebGL油田三维可视化监控 0x00 楔子0x01 寂静无声0x02 初步尝试0x03 CefSharp现身0x04
最近做的一个项目,是一个油田三维可视化监控的场景编辑和监控的系统,和三维组态有些类似,不过主要用于油田上。 效果如下图所示:
用户3158888
2020/05/12
3K1
C# WPF 嵌入网页版WebGL油田三维可视化监控
                            0x00 楔子0x01 寂静无声0x02 初步尝试0x03 CefSharp现身0x04
WPF中使用CEFSharp加载网页及交互
几种方案都各有利弊,可以根据团队的情况选用,都是相对不错的,其他的方案比如Flutter,Java就不太推荐。
码客说
2021/11/01
5K0
WPF中使用CEFSharp加载网页及交互
cefsharp文档在哪_hdfs创建目录
参考:https://github.com/cefsharp/CefSharp/issues/601 https://gist.github.com/BlackBooth/19ce027c4f68c1eb4fc1144988ca6662
全栈程序员站长
2022/10/02
1.4K0
cefsharp文档在哪_hdfs创建目录
c#使用CefSharp开发winform——环境搭建
最终下载的共4个包,cef.redist64,cef.redist86,cefsharp.common,cefsharp.winforms
code2roc
2023/07/19
7270
c#使用CefSharp开发winform——环境搭建
CefSharp 中过滤图片 RequestHandler
具体内同参照 附录;将 OnBeforeResourceLoad方法替换成2中的内容,很简单;
全栈程序员站长
2022/11/04
9460
CefSharp请求资源拦截及自定义处理
在CefSharp中,我们不仅可以使用Chromium浏览器内核,还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理。
w4ngzhen
2023/10/18
1.4K0
CefSharp请求资源拦截及自定义处理
CefSharp 与 js 相互调用「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。 CefSharp 与 js 相互调用
全栈程序员站长
2022/11/04
5.4K0
ManualResetEvent实现线程的暂停与恢复
前些天遇到一个需求,在没有第三方源码的情况下,刷新一个第三方UI,并且拦截到其ajax请求的返回结果。当结果为AVALIABLE的时候,停止刷新并语音提示,否则继续刷新。
Chester Chen
2022/08/18
8900
ManualResetEvent实现线程的暂停与恢复
json简介
json的书写格式 json语法很简单,也很容易理解,具体如下: 语法规则: 数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JSON 值:
zls365
2020/08/19
5740
json简介
CefSharp自定义缓存实现
上文介绍了《C# 使用 CefSharp 内嵌网页 - 并给出 C# 与 JS 的交互示例》,本文介绍 CefSharp 的缓存实现,先来说说添加缓存的好处:
沙漠尽头的狼
2023/04/26
1.5K0
C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用
DockPanelSuite是托管在GitHub上的一个开源项目,使用在WinForms上,是一个简单、美观的界面组件。其中weiFenLuo.winFormsUI.Docking.dll较为人熟知,它是DockPanel Suite的一个类库,可以实现类似VS的窗口停靠、悬浮、自动隐藏等功能,同时能够保存窗体布局为XML文件,启动时加载XML配置文件还原布局。DockPanelSuite还包含有多种VS主题,能够自由切换变换风格。
vv彭
2021/06/10
8.2K0
C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用
相关推荐
winform与cefsharp混合开发_winform窗体
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验