百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

VB.NET Edge webview2 引入

yuyutoo 2025-02-15 18:03 5 浏览 0 评论

一、前言

继微软抛弃IE浏览器全面拥抱Chromium内核推出Edge浏览器后,一直在关注那老旧的webbrowser未来如何发展。虽然编程语言千千万,也有人不看好winform编程,但在当前windows依旧占据相当的市场份额。在webbrowser中官方支持的是IE内核,而IE内核又跟你的电脑的安装版本有关系,再加上IE对各种html前端支持的不友好。vuejs都已经彻底抛弃了IE浏览器,迟迟不敢在生产环境大量应用vueweb应用。(有人可能会说可以换webkit或者cesharp内核,笔者也尝试过,但毕竟不是微软的亲生,各种不友好,各种复杂,webkit都多久没更新了,根据历史经验过于复杂的东西一般很难长久)。
之前关注过webview2,但那段时间刚出支持也不是很友好,无法很有效继承,有说要安装edge浏览器的,又说要安装别的,而win7可能又不支持等等,而恰好我们的场景用又存在大量的win7,只能暂时放弃。
最近要应用Vue,重新关注了一下相关应用,很惊喜的发现,webview2有了官方比较好的支持(可能早就有了,但是肯定不会超过1年)微软官方文档链接WebView2 - Microsoft Edge Developer

如果本文有不对的地方还要以官方文档为准,研究不深。先说体验效果,webview2真的很好,内核彻底替换为chromium,Vue项目跑起来了也不用担心各种不兼容了,终于不用为webbrowser担忧了。由于项目使用的VB.NET(不要问为甚么不是C#,我会一点,但是用不到),因此考虑到系统中的使用还是集成到了VB.NET中,在搜索过程中发现webview2的资料不多,一些属性还没有很好的案例,可能与winform的没落有关系吧,而且相关介绍均是C#的,也包括官方文档。因此在基本集成以后,通过这篇文章做简单分享与记录。这里的集成比较简单,主要是满足WEB和客户端的混合编程,也是webview2介绍中的重要应用之一,毕竟WEB才是管理系统的未来。

二、Webview2 简单介绍

Webview2 加了个2可能是为了跟安卓的webview区分吧,毕竟一搜webview出来的全是安卓的。

Webview2支持win7、win8、win10以及对应的server版本,可以说是涵盖了windows的江山,具体的版本说明可以参考官方文档。如果你说还有xp,天就被聊死了,我们不是一路人。

从搜到的帖子看大家对于webview2还是持肯定态度的,比webkit,cefsharp的兼容性要好的多,从我的体验来讲它可以完全替代webbrowser控件,正在生产环境中替代原有webbrowser控件。

三、环境配置

Webview2虽然没有了IE一堆乱糟糟的版本问题,但是Webview2毕竟是依赖与Edge诞生的产品,它依然需要一定的环境,微软提供了2种方案。

  • Webview2 runtime 运行时环境,分为x86,x64,arm版本,按照对应版本下载即可,通过实测在64位安装x86版本也可以使用,但还是建议按照对应版本安装。在前面给到的微软官方链接可以安装
  • Microsoft Edge 预览体验成员(预览版) 注意不是我们附带的发布版的edge,是单独的预览版,有3款可以选择,官方建议candy版天天更新。

这里选择的是Webview2 runtime毕竟我们是集成环境,这里可以根据需要选择。

  • 开发工具要求VS2017以上,案例使用的vs2017
  • .net版本 有说要4.6.2以上的,官方文档选的4.7.2。案例实测4.5.2中可用。

四、进入正题

官方文档是C#的比较简单,C#er们自行阅览即可,毕竟在大神面前我只是个渣渣。

1、引入Webview2

  • "解决方案资源管理器"中,右击项目名称,然后选择"管理 NuGet 包
  • 在搜索栏中,键入并单击"Microsoft.Web.WebView2"。WebView2
  • 工具箱中就有了webview2控件了,拖拽即可,不过多解释

2、关键方法、事件

  • 导航方法(链接跳转)
WebView21.CoreWebView2.Navigate(im_ipurl)
  • 自动检测安装Webview2 runtime(放在WebView21_CoreWebView2InitializationCompleted事件中)
    Function installruntime()
        Try
            Dim v As String = WebView21.Source.ToString
            Me.Text = ("Copyright ? 2021-2022 lxfamn, All Rights Reserved " )
        Catch ex As Exception
            If Environment.Is64BitOperatingSystem Then
                MsgBox("系统全面升级浏览器内核,接下来系统将自动为您安装补丁,请在弹出窗口选运行,64位系统")
                Process.Start("\\运行组件共享路径\webruntime\X64.exe")
            Else
                MsgBox("系统全面升级浏览器内核,接下来系统将自动为您安装补丁,请在弹出窗口选运行,32位系统")
                Process.Start("\\运行组件共享路径\webruntime\X64.exe")
            End If

        End Try
    End Function
   Private Sub WebView21_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles WebView21.CoreWebView2InitializationCompleted
        installruntime()
        WebView21.CoreWebView2.Navigate(im_ipurl & "/home")

    End Sub
  • NavigationCompleted 相当于webbrowser documnentcomplete事件

事件执行流程如下图所示:

3、最关键、复杂的流程

webview与主机程序的交互过程,在原有的webbrowser中在
WebBrowser1_DocumentCompleted事件中通过对WebBrowser1.DocumentText的解析可以做进行不同的处理。

  • CoreWebView2 是webview2下的一个核心方法,感觉像是内核中的一些方法

在webview2中没有了上述事件和方法,取而代之的是postMessage,官方案例使用的C#,使用了aysn异步绑定等方式。

简单可以理解为,提供了
WebView21.CoreWebView2.ExecuteScriptAsync

WebView21.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync
方法,向站点注入javasript程序来实现相关功能,这里我只使用了ExecuteScriptAsync方法,在NavigationCompleted事件,在页面加载完成后向主机发送消息,
WebView21_WebMessageReceived
事件中接受发送的消息。

  Private Sub WebView21_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles WebView21.NavigationCompleted
        TextBox1.Text = WebView21.Source.ToString()'导航完成后,在标题栏中显示当前网址
        If (TextBox1.Text.Contains("www.microsoft.com")) Then
            WebView21.CoreWebView2.Navigate("https://blog.lxfamn.cn/?cat=101")
        End If
        WebView21.CoreWebView2.ExecuteScriptAsync("window.chrome.webview.postMessage(document.body.innerHTML);")
    End Sub
    Private Sub WebView21_WebMessageReceived(sender As Object, e As CoreWebView2WebMessageReceivedEventArgs) Handles WebView21.WebMessageReceived
        webdeal(e.WebMessageAsJson.ToString)'根据接收的消息进行逻辑处理
    End Sub

4、其他的一些

建议结合官方文档进行阅览,理解一些方法和规则,一些方法和过程在官方文档中解释还是比较清楚的,本文主要是帮助解释一些在vb.net以及一些逻辑等问题的解释。

附上一些处理url自动补充前缀的方法

 Function geturl(dealway As String)
        Try
            Dim urlstr As String = TextBox1.Text
            If Not urlstr.Contains("http") Then
                Dim re As New Regex("((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}")
                Dim Contents As MatchCollection = re.Matches(urlstr)
                Dim rea As New Regex("[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?")
                Dim Contentsa As MatchCollection = rea.Matches(urlstr)
                If Contentsa.Count > 0 Or Contents.Count > 0 Then

                    urlstr = "http://" & urlstr
                Else
                    If dealway = "百度" Then
                        urlstr = "https://www.baidu.com/s?wd=" & urlstr
                    End If
                    If dealway = "blog" Then
                        urlstr = "https://blog.lxfamn.cn/?cat=101"

                    End If
                
                End If
            End If
            WebView21.CoreWebView2.Navigate((urlstr))
        Catch
            installruntime()
        End Try
    End Function

界面布局

有问题之处欢迎指正

个人博客:VB.NET Edge webview2 引入-IT涉猎者

未经允许不得转载:https://blog.lxfamn.cn/?p=6698

相关推荐

墨尔本一华裔男子与亚裔男子分别失踪数日 警方寻人

中新网5月15日电据澳洲新快网报道,据澳大利亚维州警察局网站消息,22岁的华裔男子邓跃(Yue‘Peter’Deng,音译)失踪已6天,维州警方于当地时间13日发布寻人通告,寻求公众协助寻找邓跃。华...

网络交友须谨慎!美国犹他州一男子因涉嫌杀害女网友被捕

伊森·洪克斯克(图源网络,侵删)据美国广播公司(ABC)25日报道,美国犹他州一名男子于24日因涉嫌谋杀被捕。警方表示,这名男子主动告知警局,称其杀害了一名在网络交友软件上认识的25岁女子。雷顿警...

一课译词:来龙去脉(来龙去脉 的意思解释)

Mountainranges[Photo/SIPA]“来龙去脉”,汉语成语,本指山脉的走势和去向,现比喻一件事的前因后果(causeandeffectofanevent),可以翻译为“i...

高考重要考点:range(range高考用法)

range可以用作动词,也可以用作名词,含义特别多,在阅读理解中出现的频率很高,还经常作为完形填空的选项,而且在作文中使用是非常好的高级词汇。...

C++20 Ranges:现代范围操作(现代c++白皮书)

1.引言:C++20Ranges库简介C++20引入的Ranges库是C++标准库的重要更新,旨在提供更现代化、表达力更强的方式来处理数据序列(范围,range)。Ranges库基于...

学习VBA,报表做到飞 第二章 数组 2.4 Filter函数

第二章数组2.4Filter函数Filter函数功能与autofilter函数类似,它对一个一维数组进行筛选,返回一个从0开始的数组。...

VBA学习笔记:数组:数组相关函数—Split,Join

Split拆分字符串函数,语法Split(expression,字符,Limit,compare),第1参数为必写,后面3个参数都是可选项。Expression为需要拆分的数据,“字符”就是以哪个字...

VBA如何自定义序列,学会这些方法,让你工作更轻松

No.1在Excel中,自定义序列是一种快速填表机制,如何有效地利用这个方法,可以大大增加工作效率。通常在操作工作表的时候,可能会输入一些很有序的序列,如果一一录入就显得十分笨拙。Excel给出了一种...

Excel VBA入门教程1.3 数组基础(vba数组详解)

1.3数组使用数组和对象时,也要声明,这里说下数组的声明:'确定范围的数组,可以存储b-a+1个数,a、b为整数Dim数组名称(aTob)As数据类型Dimarr...

远程网络调试工具百宝箱-MobaXterm

MobaXterm是一个功能强大的远程网络工具百宝箱,它将所有重要的远程网络工具(SSH、Telnet、X11、RDP、VNC、FTP、MOSH、Serial等)和Unix命令(bash、ls、cat...

AREX:携程新一代自动化回归测试工具的设计与实现

一、背景随着携程机票BU业务规模的不断提高,业务系统日趋复杂,各种问题和挑战也随之而来。对于研发测试团队,面临着各种效能困境,包括业务复杂度高、数据构造工作量大、回归测试全量回归、沟通成本高、测试用例...

Windows、Android、IOS、Web自动化工具选择策略

Windows平台中应用UI自动化测试解决方案AutoIT是开源工具,该工具识别windows的标准控件效果不错,但是当它遇到应用中非标准控件定义的UI元素时往往就无能为力了,这个时候选择silkte...

python自动化工具:pywinauto(python快速上手 自动化)

简介Pywinauto是完全由Python构建的一个模块,可以用于自动化Windows上的GUI应用程序。同时,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作。我在...

时下最火的 Airtest 如何测试手机 APP?

引言Airtest是网易出品的一款基于图像识别的自动化测试工具,主要应用在手机APP和游戏的测试。一旦使用了这个工具进行APP的自动化,你就会发现自动化测试原来是如此简单!!连接手机要进行...

【推荐】7个最强Appium替代工具,移动App自动化测试必备!

在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节。Appium作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知。然而,在不同的测试场景和需求下,还有许多其他优...

取消回复欢迎 发表评论: