Cefsharp_ceph nfs

Cefsharp_ceph nfs文章目录0.简介1.安装2.H.264支持3.加载本地HTML文件4.多个窗口显示浏览器0.简介CefSharp,简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。它支持HTML5。CefSharp的功能比较复杂,以下只介绍一些我觉得比较重要的并且目前经常用的功能,此“挑食”之意也。1.安装CefSharp的安装过程如下:打开VisualStduio,新建一个Windows窗体应用(.NETFramework);在“工具”

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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”平台上运行,需要配置。打开“配置管理器”;
    在这里插入图片描述
  5. 新建“x86”和“x64”两个平台。从理论上来说使用x86或者x64平台都行,但由于之后要使用编译好的支持h264的x86内核,因此此处选择x86平台;
    在这里插入图片描述
  6. 在 Form1.cs 中添加如下代码;
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目录下的同名文件;
    在这里插入图片描述
  3. 调试程序,查看效果。显然浏览器已支持H.264。
    在这里插入图片描述

3. 加载本地HTML文件

除了使用CefSharp浏览器访问网络地址,还有一个重要的用途就是访问本地文件。
首先将需要用到的HTML和其他静态文件拷贝到工程目录,并设置“复制到输出目录”:
在这里插入图片描述
然后编写如下代码:

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. 多个窗口显示浏览器

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

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框架),增加函数接口;
<script> const vue = new Vue({ 
     el: '#app', data: { 
     title: '标题1', }, }); function changeTitle(title) { 
     vue.title = title; } </script>
  1. 编写C#代码,请注意两处中文注释的部分;
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()方法是同步执行的,也就是程序会阻塞!

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代码:

function add(a, b) { 
   
    for (var i = 0; i < 9999999999; ++i) { 
   
        ;
    }
    return a + b;
}

6. 在JS中调用C#方法

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

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中编写如下代码:

<!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>

运行效果:
在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 茜在人名可以读xi吗_茜读xi还是qian?

    茜在人名可以读xi吗_茜读xi还是qian?01茜可以读xi,也可以读qian,通常用于外国女子名字译音时多读xī,而qiàn多用于中国名。茜,本义是草名即“茜草”读音为qiàn时,指茜草,在古汉语中也指“深红”。读xī时,多为音译用字,多用于人名。茜汉语常用字,读作qiàn或者xī,最早见于《说文》小篆。本义是指一种草名,即茜草,为多年生草本植物,可作红色染料,后引申为大红色、秀美、生动等。茜草【qiàncǎo】,多年生草本植物,根圆锥…

  • vue项目刷新当前页面的方法

    vue项目刷新当前页面的方法尝试了几种刷新页面的方法,比如1、浏览器直接刷新(会出现短暂的白页面现象)2、设置一个空白页面,需要刷新的时候跳转到空页面再从空页面跳回来(些许麻烦)3、使用provide/inject(目前觉得最实用,主讲此方法)…

  • The Heartbleed Bug「建议收藏」

    The Heartbleed Bug「建议收藏」http://heartbleed.com/TheHeartbleedBugisaseriousvulnerabilityinthepopularOpenSSLcryptographicsoftwarelibrary.Thisweaknessallowsstealingtheinformationprotected,underno

  • 第12章方差分析介绍课_t检验中的第一类错误是指

    第12章方差分析介绍课_t检验中的第一类错误是指方差分析用以比较两组及以上处理之间的平均数差异的情况因素:方差分析中,用于分派组别的变量水平:因素的个别情形或个别值方差分析与t检验比较(为什么使用方差分析而不用t检验多次比较均值差异):检验α水平:做一个单独的假设检验时犯第一类错误的可能性。实验α水平:当一个实验包括多个不同的假设检验时,实验中全部独立的检验所犯第一类错误积累后的犯错总概率。通常,实验α水平比任何一个单独的检验的α值大。方差分析可在一次实验中同时进行三个及以上均值差异的比较,避免了实验α的膨胀。方差分析…

    2022年10月10日
  • Pytest(16)随机执行测试用例pytest-random-order「建议收藏」

    Pytest(16)随机执行测试用例pytest-random-order「建议收藏」前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

  • Linux日志管理工具 journalctl「建议收藏」

    Linux日志管理工具 journalctl「建议收藏」日志Linux日志管理基本概念journalctl查询所有系统服务日志内容journalctlmaybeusedtoquerythecontentsofthesystemd(1)journalaswrittenbysystemd-journald.service(8).CentOS7及以后版本,利用Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有系统日志查看内容包括内核日志

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号