【WinForm】WebView2-个性化浏览器-桌面程序开发详解

5 篇文章 2 订阅
订阅专栏

这是一个桌面程序上的浏览器,是用插件WebView2开发的浏览器桌面程序,功能体验堪比Edge浏览器,相比使用Chrome内核插件开发浏览器来说,还是用插件WebView2开发来得简单一些,接下来讲一讲实现过程。

开发之前,建议先看看微软的 WebView2 开发文档,很有帮助

使用Visual Studio开发工具,新建一个项目,项目模板选Windows 窗体应用(.Net Framework),"C#"编程语言,桌面应用,

例如,作者填写的解决方案和项目名称均为 WindowsFormsWebView2,如下图
在这里插入图片描述

注意目标框架,要选webview2支持的.NET Framework 4.7.2 以上,

页面布局

在Form1的设计窗口中,拖拉放置需要的一些组件,布局完成如下图所示
在这里插入图片描述

工具条显示的一些图标文件都存放在项目源码的资源文件夹里,可以自己在网上找来用

webview2插件

接下来就是写代码了,不忙不忙,要去找webview2插件来引用,

选中项目名,点鼠标右键,打开项目的管理NuGet程序包,如下图所示
在这里插入图片描述
搜索一下webview2,找到它,点击安装按钮,安装好如下图所示
在这里插入图片描述

点击重新编译项目,编译输出结果如果报错的话,那很不幸,
可能过程不顺利,请排查是什么错误引起的,试试提高程序项目的NET框架版本

页面逻辑

开始写逻辑代码,

从页面开始加载时处理初始化和注册事件,到页面关闭时需要释放浏览器资源,代码如下

public partial class Form1 : Form {

		/// <summary>
        /// 浏览器列表
        /// </summary>
        private List<WebView2> webViewList = new List<WebView2>();
		//...其它定义省略了
		
		public Form1()
        {
            InitializeComponent();
            //初始化...
        }

		/// <summary>
        /// 页面加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e){
			//...初始化页面
		}

		/// <summary>
        /// 页面关闭
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_FormClosed(object sender, FormClosedEventArgs e){
			//...释放浏览器资源
			foreach (var wv in webViewList)
            {
                wv.Dispose();
            }
		}
		//...还有...
}

百度一下

看看首页布局,点击百度一下按钮,实现点击事件,代码如下

private void button1_Click(object sender, EventArgs e)
{
    var url = textBox1.Text;
    if (!url.StartsWith("http"))
    {
        url = "https://www.baidu.com/s?wd=" + url;
    }
    addNewTabPage(url);
}

打开浏览器

其中方法addNewTabPage(url),是添加标签卡,调用webview2插件打开浏览器,代码如下

private void addNewTabPage(string url)
{
	//引用webview2插件
     var webView = new WebView2();
     //将webview添加到新标签卡下...
     addWebView(webView);
	 //向多标签容器控件添加新标签卡
     var title = url.Substring(0, Math.Min(url.Length, 12));
     tabControl1.TabPages.Add(title);
	 //...
	 //再将webview添加到新标签卡下...
     page.Controls.Add(webView);
     //切换到新标签卡
     tabControl1.SelectedIndex = index;
	 //...
     updateInputUrlBox(url);
     loadUri(url);
 }

其中的两个方法updateInputUrlBox(url)loadUri(url),看名知意,这里就不展开讲

接下来,讲一讲这个方法addWebView(webView)是怎么做的,代码如下

private void addWebView(WebView2 webView)
{
	//绑定 浏览器初始化完成事件
    webView.CoreWebView2InitializationCompleted += webView21_CoreWebView2InitializationCompleted;
    //绑定 浏览器地址导航开始加载事件
    webView.NavigationStarting += webView_NavigationStarting;
    //绑定 浏览器地址导航加载完成事件
    webView.NavigationCompleted += webView_NavigationCompleted;
    //添加到列表中
    webViewList.Add(webView);
}

主要是第一个初始化事件,很重要,其它事件不是重要的,这里不再一一展开讲

初始化浏览器

看看浏览器初始化完成事件做了什么,代码如下

private void webView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
	 //获取webview2对象实例
     var webView = sender as WebView2;
     //获取浏览器内核对象
     var core = webView.CoreWebView2;
	 //...
	 //连接地址跳转事件
     core.NewWindowRequested += (sender2, e2) => coreWebView2_NewWindowRequested(webView, e2);
     //底部状态栏改变事件
     core.StatusBarTextChanged += (sender2, e2) => coreWebView2_StatusBarTextChanged(webView, e2);
     //浏览历史改变事件
     core.HistoryChanged += (sender2, e2) => coreWebView2_HistoryChanged(webView, e2);
     //下载开始事件
     core.DownloadStarting += coreWebView2_DownloadStarting;
     //...
 }

这是对内核的初始化,获得浏览器内核并绑定一些事件,
内核就是调用的浏览器程序,调用的其实就是它,可以把webview2看作是对浏览器的包装

浏览器跳转

由于很多网页内部点击链接会打开新窗口,会影响体验,需要对绑定跳转事件做一下处理,代码如下

private void coreWebView2_NewWindowRequested(WebView2 webView, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
{
    e.Handled = true;//停止弹窗
    addNewTabPage(e.Uri.ToString());
}

其它一些事件同上面的实现步骤类似,非重要可忽略,
需要详细的可以看看项目源码,整个代码共占600多行吧(包括空行),看着不是很多,这里不再展开讲

打开链接

最后,如下这一行代码,就是打开链接的

webView.Source = new Uri(text);

细心观察会发现,首次执行这代码会调用初始化完成事件,就是上面提到的webView.CoreWebView2InitializationCompleted

如下这一行代码也可以打开链接的

webView.CoreWebView2.Navigate(text);

前提是要经过浏览器初始化才能用,否则webView.CoreWebView2=null 抛出对象未实例化异常

关于项目

就讲到这里,顺利的话,码完代码基本上就可以运行项目了,以下是运行效果图
在这里插入图片描述
输入关键词,然后点击百度一下按钮,或者点收藏的链接项,就可以打开新的标签卡,如下图所示
在这里插入图片描述

收藏的链接项是怎么来的呢
这是作者的项目源码实现的收藏功能,平时浏览的时候,想要收藏就点一下就有了,
收藏的链接是不会消失的,会写到文件中,然后保存到硬盘里

在此基础上改一改定制,加一加功能,就能成为自己的专用浏览器哦,

想想打造一个自己的个性化浏览器是不是很酷呢,
当然了,那些浏览器没有自己想要的功能,可以自己来实现吧,
有编程基础的话,感觉不会太复杂,不妨试一试,万一实现了呢

想要看项目源码可以 点击这里查看下载,(可能手机上看不到资源一栏,请用电脑浏览器看),请放心下载,希望对你有帮助,感谢支持与信任!

WinFormWebView2-自用-个性化浏览器-桌面程序开发-程序源码
08-15
这是集成了WebView2的内核浏览器桌面程序,类似Edge,Chrome浏览器,使用VisualStudio2019开发工具编写来的,项目正常编译可套,请放心下载。 可以看配套的指导文章:https://blog.csdn.net/zs1028/article/details/132298695
Winform使用Webview2(Edge浏览器核心)实现精美教程目录
01-21
WinForm中使用WebVewi2
在WPF中使用WebView2详解
最新发布
zhaotianff的专栏
07-25 3467
WebView2在WPF中的使用,非常详细。
WebView2示例
12-30
WebView2示例根据官方教程练习的示例
放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序
过客2019
05-10 685
Electron 带来了很多优秀的桌面软件,但并不一定总是适合我们的需求。多个选择总是好事!
三.Winform使用Webview2加载本地HTML页面
东明之羞的博客
01-21 1450
WebView2加载本地HTML,需要将HTML资源文件设置为`复制到输出目录`更改为`如果较新则复制`。通过`Application.StartupPath`和 Path.GetFullPath属性和方法获取html路径
WebView2Browser:使用Microsoft Edge WebView2控件构建的Web浏览器
05-25
描述 extendedZipContent 语言 page_type 产品 urlFragment 使用Microsoft Edge WebView2控件构建的Web浏览器。 小路 目标 执照 执照 cpp javascript 样本 微软边缘 webview2浏览器 WebView2浏览器 使用控件构建的Web浏览器WebView2Browser是Windows桌面应用程序示例,演示了WebView2控件功能。 它是作为Win32 项目构建的,并在WebView2环境中同时使用C ++和JavaScript来增强其功能。 WebView2Browser显示了WebView2的一些最简单的用法-例如创建和导航WebView,还显示了一些更复杂的工作流,例如使用在单独的环境中通信WebView。 它旨在作为丰富的代码示例来介绍如何使用WebView2 API来构建自己的应
WebView之2
weixin_33943347的博客
08-06 265
首先需要添加权限: &lt;uses-permission android:name="android.permission.INTERNET"/&gt;   MainActivity: package com.wyl.webview; import android.app.Activity; import android.app.ProgressDialog; import ...
WebView2教程(基于C++)【一】环境初始化
liulun的博客
04-24 1703
中,以后我们会从这个d中获取配置信息。执行之后,就创建了一个App对象,这个对象被保存在静态变量app中,在App的构造函数中,先初始化了应用程序的配置信息。在这个方法中,webview2的环境对象被保存到静态变量webViewEnv中了,接着创建了窗口对象,并保存到一个容器wins中(静态变量)。这个方法会判断当前的用户环境,是否安装了WebView2的运行时,如果没有,则打开一个网页,让用户去下载WebView2的运行时。如你所见,依据我们的配置文件,我们是可以在应用程序启动时,直接创建多个窗口的。
.NET桌面程序应用WebView2组件集成网页开发3 WebView2的进程模型
「 虚幻私塾」
04-27 1509
🚀 优质资源分享 🚀 学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 系列目录     【已更新最新开发文章,点击查看详细】   WebView2 运行时使用与 Microsoft Edge 浏览器
Winform实现简单浏览器
10-21
非常简单的一款浏览器源码,但基本的功能都实现了包括网站收藏,截图,快捷菜单等
WINFORM制作浏览器源码
07-09
使用winform开发的一款浏览器,实现多页功能。
winform 嵌套chrome浏览器,.net开发谷歌内核浏览器
09-24
.net winform 嵌套谷歌浏览器,flash插件已安装。直接能运行。
WinFormWebView2实现JS与C#交互Demo
03-02
接着,在WinForm设计器中添加一个WebView2控件到窗体上,并在代码中初始化它。初始化通常包括设置初始URL、加载完成后的回调以及设置用户数据目录,以便WebView2存储本地缓存和用户数据: ```csharp private ...
winform-nested-chromium-v1.0.zip
11-17
ibot-manager-winform-client-v1.0 使用winform打开知识库 访问manager的2中方式 1.在浏览器中打开manager地址 2.使用winfrom-nested-chromium打开浏览器地址 使用winfrom-nested-chromium打开浏览器地址...
WPF中使用WebView2控件
陈明亮的博客
01-31 4319
WebView2 全称 Microsoft Edge WebView2 控件,此控件的作用是在本机桌面应用中嵌入web技术(html,css,javascript),从名字就可以看出来WebView2使用了Edge内核渲染web内容。通俗来说,WebView2控件是一个UI组件,允许在桌面应用中提供web能力的集成,即俗称的混合开发。当web页面中点击一个按钮需要通知WPF宿主程序,或者向WPF传递一些指令和数据的时候,需要用到 postMessage 和 WebMessageReceived。
winform webview2
03-25
可以简单地理解为,在WinForms 应用程序中,使用 WebView2 控件来显示网页和执行 JavaScript。 WebView2 是一个基于 Chromium 的嵌入式浏览器控件,可让你在 NWinForms 应用程序中嵌入浏览器功能,包括许多常见的浏览器功能,例如标签页、捆绑的证书和安全性等。使用 WebView2 控件可大大减少你在使用 Web 浏览器时需要编写的代码量,并提供更好的交互性,同时保持 WinForms 程序的灵活性。
写文章

热门文章

  • 【uniapp】scroll-view 实现自动滚动到最底部 22509
  • 中国象棋-单机游戏-微信小程序的项目开发流程详解 21666
  • 【CMD】执行adb devices找不到设备的问题 20167
  • PHP preg_replace() 正则替换所有符合条件的字符串 13922
  • 【微信小程序】canvasToTempFilePath:fail fail canvas is empty 12726

分类专栏

  • 微信小程序源码 23篇
  • WinForm项目源码 5篇
  • Uniapp项目源码 3篇
  • 微信小游戏源码 3篇
  • HTML5项目源码 3篇
  • Flutter项目源码 2篇
  • Android项目源码 2篇
  • uniapp 15篇
  • 微信小程序 8篇
  • Canvas画布绘图 7篇
  • NodeJs 7篇
  • JavaScript编程 19篇
  • Android 15篇
  • flutter 3篇
  • WinForm 11篇
  • WPF 4篇
  • Web 前端开发 10篇
  • C#编程 12篇
  • php编程 4篇
  • Windows 6篇
  • 字典查询 2篇
  • 文档编程 3篇

最新评论

  • 【贪吃蛇】微信小程序的游戏转到小游戏上实现方法详解

    TA远方: 微信开发者工具改版有调整,以前就有,现在给改没了吧表情包

  • 【贪吃蛇】微信小程序的游戏转到小游戏上实现方法详解

    Jaeger_sekiro: 为什么我的模板选择小游戏那只有纯gl模式啊

  • 【Android】关于WIFI局域网的手机摄像头当视频监控用实现方案详解

    TA远方: 有的,就在文章头部,用电脑上浏览就能看到的,手机上看不到吧,这是源码链接https://download.csdn.net/download/zs1028/85102800

  • 【Android】关于WIFI局域网的手机摄像头当视频监控用实现方案详解

    平淡生活里的刺: 博主源码怎么没了

  • 【uniapp】uni.request请求跨域问题解决方案

    liuxixihome: 这是一篇真正解决了问题的文章。比uniapp官方提供的有用。

最新文章

  • 【WPF】桌面程序开发之xaml页面绑定数据模型详解
  • 【WPF】桌面程序开发之xaml页面主题和样式详解
  • 【WPF】桌面程序开发之xaml页面基础布局方式详解
2024年26篇
2023年61篇
2022年61篇
2021年7篇
2020年1篇
2017年6篇
2016年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA远方

谢谢!收到你的爱╮(╯▽╰)╭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家贺州玻璃钢雕塑制作河南景观玻璃钢雕塑制作广东室内商场美陈市场价安庆浮雕玻璃钢雕塑厂家常用玻璃钢花盆生产贵州公园玻璃钢雕塑蚌埠玻璃钢雕塑哪家好商场南瓜美陈邯郸玻璃钢雕塑工厂广州现代雕塑玻璃钢贵州玻璃钢雕塑工艺百货商场门头灯光美陈衢州玻璃钢牛雕塑酒店玻璃钢花盆商场雕塑保安亭玻璃钢雕塑广东美陈商场怎么样沈阳玻璃钢花盆批发铜川动物玻璃钢雕塑定做河北走廊商场美陈价格芒市玻璃钢雕塑设计厂家重庆玻璃钢雕塑价位四川商场美陈花器玻璃钢潮玩雕塑金华卡通玻璃钢雕塑玻璃钢动物牛雕塑生产厂家玻璃钢雕塑华韵雕塑北京火烈鸟玻璃钢雕塑生产厂家玻璃钢雕塑设计图纸江苏超市商场美陈厂家供应南京玻璃钢园林雕塑优惠香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化