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

这篇具有很好参考价值的文章主要介绍了【WinForm】WebView2-个性化浏览器-桌面程序开发详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

例如,作者填写的解决方案和项目名称均为 WindowsFormsWebView2,如下图
c# webview2,WinForm,webview2,winform,浏览器,桌面程序,个性化

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

页面布局

在Form1的设计窗口中,拖拉放置需要的一些组件,布局完成如下图所示
c# webview2,WinForm,webview2,winform,浏览器,桌面程序,个性化

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

webview2插件

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

选中项目名,点鼠标右键,打开项目的管理NuGet程序包,如下图所示
c# webview2,WinForm,webview2,winform,浏览器,桌面程序,个性化
搜索一下webview2,找到它,点击安装按钮,安装好如下图所示
c# webview2,WinForm,webview2,winform,浏览器,桌面程序,个性化

点击重新编译项目,编译输出结果如果报错的话,那很不幸,
可能过程不顺利,请排查是什么错误引起的,试试提高程序项目的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 抛出对象未实例化异常

关于项目

就讲到这里,顺利的话,码完代码基本上就可以运行项目了,以下是运行效果图
c# webview2,WinForm,webview2,winform,浏览器,桌面程序,个性化
输入关键词,然后点击百度一下按钮,或者点收藏的链接项,就可以打开新的标签卡,如下图所示
c# webview2,WinForm,webview2,winform,浏览器,桌面程序,个性化

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

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

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

想要看项目源码可以点击这里查看下载,(可能手机上看不到资源一栏,请用电脑浏览器看),请放心下载,希望对你有帮助,感谢支持与信任!文章来源地址https://www.toymoban.com/news/detail-756963.html

到了这里,关于【WinForm】WebView2-个性化浏览器-桌面程序开发详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用ChatGPT进行个性化学习

    推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 在这篇文章中,您将发现 ChatGPT 作为机器学习和数据科学爱好者的个人导师的好处。特别是,您将学习 如何让ChatGPT引导你学习抽象代数 如何让 ChatGPT 帮助您准备数据科学面试 让我们开始吧。 使用ChatG

    2024年02月16日
    浏览(56)
  • 一、 个性化电商广告推荐系统介绍

    1.1 数据集介绍 Ali_Display_Ad_Click是阿里巴巴提供的一个淘宝展示广告点击率预估数据集 数据集来源:天池竞赛 原始样本骨架raw_sample 淘宝网站中随机抽样了114万用户8天内的广告展示/点击日志(2600万条记录),构成原始的样本骨架。 字段说明如下: user_id:脱敏过的用户ID;

    2024年02月13日
    浏览(66)
  • 个性化信息推荐系统体系结构

    目前,个性化信息推荐系统总的来说可以分 为基于规则的和基于过滤的两种推荐系统。基于关联规则的个性化信息服务,主要 针对特定的站点组织结构,采用最大向前访问路径辅助内容事务方法。制定一系列 规则并利用这些规则为特定用户提供服务。利用规则来推荐信息依

    2024年02月12日
    浏览(53)
  • 【java毕业设计】基于ssm+mysql+jsp的个性化影片推荐系统设计与实现(程序源码)-个性化影片推荐系统

    大家好,今天给大家介绍 基于ssm+mysql+jsp的个性化影片推荐系统设计与实现 ,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业设计源码可订阅查看上方【毕业设计】专栏获取哦。 目录  基于ssm+mysql+jsp的个性化影片推荐系统设计与

    2024年02月12日
    浏览(82)
  • 百度搜索Push个性化:新的突破

    作者 | 通用搜索产品研发组 导读 本文简单介绍了百度搜索Push个性化的发展过程,揭示了面临的困境和挑战:如何筛选优质物料、如何对用户精准推荐等。我们实施了一系列策略方法进行突破,提出核心的解决思路和切实可行的落地方案。提升了搜索DAU和点击率,希望本文的

    2024年01月19日
    浏览(59)
  • IDEA个性化设置注释模板(详细版)

    类注释模板 方法注释模板 效果展示 类注释模板是IDEA创建类时生成的注释 第一步、File - Settings 第二步、Editor - File and Code Templates - Includes - File Header 点apply,再点ok即可 模板参考如下: 按照 /**+Enter 来设置IDEA的方法注释 步骤 第一步、File - Settings 第二步、选择“Editor”-“L

    2024年02月03日
    浏览(56)
  • Codespaces个性化后台服务器配置指南

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 在前文《浏览器上写代码,4核8G微软服务器免费用,Codespaces真香》中,咱们以一个Java程序员的视角体验了GitHub的Codespaces产品的beta版,用浏览器编码并运行,体验上接近桌面版vscode,并且还能免费使

    2024年02月12日
    浏览(43)
  • 服装行业多模态算法个性化产品定制方案

    AI赋能服装设计师,设计好看、好穿、好卖的服装 传统服装行业痛点 • 设计师无法准确捕捉市场趋势,抓住中国潮流 • 上新周期长,高库存滞销风险大 • 基本款居多,难以满足消费者个性化需求 解决方案 • GPT+数据洞察,快速反应市场时尚流行趋势 • 柔性快反+数智化供

    2024年02月14日
    浏览(57)
  • Django个性化推荐系统,以电影为例

    随着科学技术发展,电脑已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。在这样的背景下人类社会进入了全新的信息化的时代。电影个性化推荐信息管理一直是信息管理的一大难题

    2024年02月01日
    浏览(50)
  • 人工智能与旅行:个性化体验的未来

    随着人工智能技术的不断发展,它已经成为了许多行业中的重要驱动力。旅行行业也不例外。人工智能技术在旅行行业中的应用非常广泛,包括但不限于旅行路线推荐、酒店预订、机票预订、旅游景点推荐等。在这篇文章中,我们将深入探讨人工智能在旅行行业中的应用,以

    2024年02月19日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包