我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#怎么使用CefSharp实现内嵌网页

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#怎么使用CefSharp实现内嵌网页

本文小编为大家详细介绍“C#怎么使用CefSharp实现内嵌网页”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么使用CefSharp实现内嵌网页”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    1. 创建项目

    创建一个WPF项目,比如命名为“WpfWithCefSharpDemo”,Winform项目类似。

    2. 创建一个网页

    嵌入的网页可以是在线的(即给出一个URL),也可以是一个离线的HTML网页,本文为了演示,在工程里直接创建网页test.html,属性设置生成操作为内容,复制到输出目录为如果较新则复制。

    <!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>CefSharp测试</title>    <script>        // 测试在Web中调用C#的方法        function callCSharpMethod() {            window.cefSharpExample.testMethod("来自JS的调用");        }        // 测试C#调用JS的方法,只传递一个普通的字符串        function displayMessage(message) {            alert(message);        }        // 接收C#传递过来的JSON对象,并以表格形式展示在页面上        function displayJson(json) {            var obj = JSON.parse(json);            var html = "<table border='1'>";            for (var prop in obj) {                html += "<tr>";                html += "<td>" + prop + "</td>"                html += "<td>" + obj[prop] + "</td>"                html += "</tr>"            }            html += "</table>";            document.getElementById("jsonTable").innerHTML = html;        }        </script></head><body><h2>CefSharp测试</h2><button onclick="callCSharpMethod()">调用C#方法</button><div id="jsonTable"></div></body></html>

    上面的代码给了相关的注释,应该很明了:

    • JS方法callCSharpMethod:用于测试JS调用C#的方法,其中cefSharpExample为C#注册的一个对象,testMethod是其一个方法,JS中方法名首字母是小写(C#里按规则是大写),首字母这里有区别,要注意一下;

    • JS方法displayMessagedisplayJson:用于测试C#调用JS的方法,方法定义类似,前者入参是一个普通字符串,后者入参是一个JSON字符串。

    • div元素jsonTable用于展示C#传来的JSon对象数据。

    3. 添加CefSharp包

    安装CefSharp程序包,可以在Visual Studio的NuGet包管理器中搜索CefSharp.Wpf并安装。

    4. 添加CefSharp控件

    MainWindow.xaml中引入CefSharp.Wpf命名空间(取别名为wpf,这里随意),将它的chromium控件加入到窗体中,顺带加几个测试按钮等:

    <Window x:Class="WpfWithCefSharpDemo.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"        mc:Ignorable="d"        Title="WPF加载CefSharp测试" Height="450" Width="800">    <Grid>        <Grid.RowDefinitions>            <RowDefinition Height="35"></RowDefinition>            <RowDefinition Height="*"></RowDefinition>            <RowDefinition Height="50"></RowDefinition>        </Grid.RowDefinitions>        <TextBlock Text="下面显示的是网页内容"></TextBlock>        <Border Grid.Row="1" BorderBrush="DarkOrange" BorderThickness="2">            <wpf:ChromiumWebBrowser x:Name="Browser" Loaded="Browser_OnLoaded">            </wpf:ChromiumWebBrowser>        </Border>        <Border Margin="3 5" Grid.Row="2" BorderBrush="Blue" BorderThickness="2" VerticalAlignment="Center">            <StackPanel Orientation="Horizontal" Height="35">                <TextBlock Text="右侧按钮是WPF按钮" VerticalAlignment="Center" Margin="5 3"></TextBlock>                <Button Content="调用JS方法" Click="CallJSFunc_Click" Height="30" Padding="10 2"></Button>                <Button Content="C#传递Json对象到网页" Click="SendJsonToWeb_Click" Height="30" Padding="10 2"></Button>            </StackPanel>        </Border>    </Grid></Window>

    5. 在C#中调用JS方法

    MainWindow.xaml.cs里,添加相关控件的事件处理方法,即C#调用JS方法的相关代码:

    using CefSharp;using Newtonsoft.Json;using System;using System.IO;using System.Text;using System.Windows;namespace WpfWithCefSharpDemo{    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            // 允许以同步的方式注册C#的对象到JS中            Browser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;            CefSharpSettings.WcfEnabled = true;            // 注册C#的对象到JS中的代码必须在Cef的Browser加载之前调用            Browser.JavascriptObjectRepository.Register("cefSharpExample", new CefSharpExample(), false,                options: BindingOptions.DefaultBinder);        }        /// <summary>        /// Cef浏览器控件加载完成后,加载网页内容,可以加载网页的Url,也可以加载网页内容        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void Browser_OnLoaded(object sender, RoutedEventArgs e)        {            var htmlFile = $"{AppDomain.CurrentDomain.BaseDirectory}test.html";            if (!File.Exists(htmlFile))            {                return;            }            var htmlContent = File.ReadAllText(htmlFile, Encoding.UTF8);            Browser.LoadHtml(htmlContent);        }        /// <summary>        /// C#里调用JS的一般方法        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void CallJSFunc_Click(object sender, RoutedEventArgs e)        {            var jsCode = $"displayMessage('C#里的调用')";            Browser.ExecuteScriptAsync(jsCode);        }        /// <summary>        /// C#调用一个JS的方法,并传递一个JSON对象        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void SendJsonToWeb_Click(object sender, RoutedEventArgs e)        {            var jsonContent = new            {                Id = 1,                Name = "沙漠尽头的狼",                Age = 25,                WebSite="https://dotnet9.com"            };            var jsonStr = JsonConvert.SerializeObject(jsonContent);            // 传递Json对象,即传递一个JSON字符串,和前面的一个示例一样            var jsCode = $"displayJson('{jsonStr}')";            Browser.ExecuteScriptAsync(jsCode);        }    }    public class CefSharpExample    {        public void TestMethod(string message)        {            Application.Current.Dispatcher.Invoke(() => { MessageBox.Show("JS里的调用"); });        }    }}

    CefSharpExample用于封装JS调用的类及方法定义,注意C#这里TestMethod方法名首字母是大写的,前面创建的HTML网页调用的该方法名首字母小写,再提醒一次,这里的区别要注意。

    6. 效果展示

    JS调用C#的方法:黄色方框内显示的网页内容,点击HTML按钮调用C#方法测试。

    C#怎么使用CefSharp实现内嵌网页

    C#调用JS的普通方法:蓝色方框内显示的WPF控件,点击WPF按钮调用JS方法测试。

    C#怎么使用CefSharp实现内嵌网页

    C#传递Json对象给JS的方法:蓝色方框内,点击WPF按钮C#传递Json对象到网页测试。

    C#怎么使用CefSharp实现内嵌网页

    读到这里,这篇“C#怎么使用CefSharp实现内嵌网页”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    C#怎么使用CefSharp实现内嵌网页

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    C#怎么使用CefSharp实现内嵌网页

    本文小编为大家详细介绍“C#怎么使用CefSharp实现内嵌网页”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么使用CefSharp实现内嵌网页”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 创建项目
    2023-07-05

    C#使用CefSharp实现内嵌网页详解

    这篇文章主要介绍了C#WPF里怎么使用CefSharp嵌入一个网页,并给出一个简单示例演示C#和网页(JS)的交互实现,感兴趣的小伙伴可以了解一下
    2023-05-14

    怎么使用PHP实现网页跳转

    本篇内容介绍了“怎么使用PHP实现网页跳转”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 使用 header 函数实现网页跳转PHP 中
    2023-07-05

    怎么使用JavaScript实现网页计算器

    这篇文章主要介绍“怎么使用JavaScript实现网页计算器”,在日常操作中,相信很多人在怎么使用JavaScript实现网页计算器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用JavaScript实
    2023-07-02

    使用C#实现网页内容保存为图片并生成压缩包

    本文介绍了如何使用C#将网页内容保存为图片并生成压缩包。利用Selenium.WebDriver和System.IO.Compression库,可以实现网页截图和ZIP压缩。文章提供了一个完整的代码示例,可帮助您将网页内容保存为PNG图像,并将其添加到ZIP存档中。
    使用C#实现网页内容保存为图片并生成压缩包
    2024-04-02

    怎么使用PHP websocket实现网页实时聊天

    小编给大家分享一下怎么使用PHP websocket实现网页实时聊天,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文开始前,先贴一张聊天室的效果图(请不要在意C
    2023-06-15

    怎么使用JavaScript实现网页电子时钟

    这篇文章主要讲解了“怎么使用JavaScript实现网页电子时钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JavaScript实现网页电子时钟”吧!如图就是一个简易的网页电子时钟
    2023-07-02

    Python怎么使用BeautifulSoup4修改网页内容

    这篇文章主要介绍了Python怎么使用BeautifulSoup4修改网页内容的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么使用BeautifulSoup4修改网页内容文章都会有所收获,下面我们
    2023-06-30

    钉钉小程序web-view怎么内嵌H5页面并实现通信

    这篇文章主要介绍了钉钉小程序web-view怎么内嵌H5页面并实现通信的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇钉钉小程序web-view怎么内嵌H5页面并实现通信文章都会有所收获,下面我们一起来看看吧。1
    2023-06-30

    使用Nodejs怎么实现内网穿透服务

    这篇文章给大家介绍使用Nodejs怎么实现内网穿透服务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 局域网内代理我们先来回顾上篇,如何实现一个局域网内的服务代理?因为这个非常简单,所以,直接上代码。const n
    2023-06-15

    怎么用vue实现网页截图

    这篇文章给大家分享的是有关怎么用vue实现网页截图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、安装html2Canvasnpm install html2canvas --save2、在需要的vue组件中引
    2023-06-25

    怎么使用AJAX实现分页

    小编给大家分享一下怎么使用AJAX实现分页,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Fenye.html
    2023-06-08

    怎么使用云服务器实现内网穿透

    使用云服务器实现内网穿透可能需要您提供内网IP地址和端口号,以便管理员可以在云主机上创建私有网络。内网穿透的过程可以大致如下:确定需要穿透的内网地址和端口号:在云服务器上安装相应的客户端程序和脚本,例如:https://ycloud.cloudflare.com/your-host.aspx等,这些脚本将用于创建私有网络。在云服务器上创建私有网络:使用以下命令创建一个私有网络,并配置IP地
    2023-10-26

    使用ajax怎么实现微信网页授权登录

    今天就跟大家聊聊有关使用ajax怎么实现微信网页授权登录,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。功能实现引导用户唤起微信授权确认页面这里需要我们做两件事,第一去配置jsapi域
    2023-06-08

    使用Java怎么实现一个网页截屏功能

    使用Java怎么实现一个网页截屏功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:package awtDemo;import java.awt.AW
    2023-05-30

    怎么使用PHP实现网页自动截图功能

    今天小编给大家分享一下怎么使用PHP实现网页自动截图功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、准备工作要实现网页
    2023-07-05

    怎么在CSS3 中使用@media 实现网页自适应

    这期内容当中小编将会给大家带来有关怎么在CSS3 中使用@media 实现网页自适应,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、CSS2 中的@mediacss2里面虽然支持@media属性,但是能
    2023-06-08

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录