Office插件—内置浏览器插件使用(三)

一、组件介绍

常见的内嵌入c#中的浏览器插件有两种一种是编译器自带的WebBrowser控件,这个控件是基础IE内核开发的,另外一种是WebView2,此控件需要额外引入安装包。
二者的比较如下:

WebBrowser控件优劣势:

  • 优势
    1. 内置支持:WebBrowser控件是C#中原生支持的控件,在Windows环境中使用方便。
    2. 易用性:对于简单的Web页面展示和交互需求,WebBrowser控件提供了基本的功能和接口。
    3. 传统稳定:作为较早引入的控件,WebBrowser在一些场景下仍然表现稳定可靠。
  • 劣势
    1. 基于IE内核:WebBrowser控件基于Internet Explorer内核,可能存在兼容性和性能方面的问题。
    2. 功能限制:对于一些现代Web技术和功能,WebBrowser控件可能无法提供良好的支持。

WebView2插件优劣势:

  • 优势
    1. 现代化技术:WebView2插件基于Chromium内核,拥有更好的性能和更先进的功能支持。
    2. 兼容性:由于采用Chromium内核,WebView2在兼容性方面更出色,能够适配更多网页内容。
    3. 更新迭代:Microsoft积极维护和更新WebView2插件,保障其与最新的Web标准和技术保持同步。
  • 劣势
    1. 需要安装:WebView2插件需要用户安装相应的运行时组件才能正常使用,增加了部署和维护成本。
    2. 学习曲线:相较于WebBrowser控件,可能需要花费一些时间来熟悉WebView2插件的新特性和接口。

根据具体需求和项目情况,开发人员可以权衡两者的优劣势来选择合适的工具。对于需要更现代化、性能更好、功能更丰富的应用程序,推荐使用WebView2插件;而对于简单需求或对传统功能有依赖的应用,则可以考虑继续使用WebBrowser控件。为了适应多样化的样式以及功能,笔者选择的是WebView2控件,接下来我们就以这个控件为基础进行下一步的讲解。

二、组件使用和兼容

1、浏览器初始化加载

为了避免频初始化环境,这里我们将环境只初始化一次,提高代码的复用性和效率。

namespace easy_bid_plugin.tool
{
    internal class WebView2EnvironmentManager
    {
        // 私有静态变量,用于存储 WebView2 环境实例
        private static CoreWebView2Environment webView2Environment = null;

        // 私有构造函数,防止外部创建实例
        private WebView2EnvironmentManager() { }

        // 公共静态方法,用于获取或创建 WebView2 环境实例
        public static async Task<CoreWebView2Environment> GetOrCreateWebView2EnvironmentAsync()
        {
            if (webView2Environment == null)
            {
                // 创建 userDataFolder 路径
                string userDataFolder = Path.Combine(Path.GetTempPath(), System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
                // 创建 WebView2 环境实例
                webView2Environment = await CoreWebView2Environment.CreateAsync(null, userDataFolder);
            }
            return webView2Environment;
        }
    }
}

2、使用

 public partial class BrowsingWindow : Form
 {
     public string MyParam { get; set; }
     private WebView2 webView;
     public BrowsingWindow(string param)
     {
         InitializeComponent();
         MyParam = param;
         InitializeWebView();
         this.ShowIcon = false; // 隐藏窗体左上角的图标
     }
     private async void InitializeWebView()
     {
         try
         {
             // 获取或创建 WebView2 环境
             CoreWebView2Environment environment = await WebView2EnvironmentManager.GetOrCreateWebView2EnvironmentAsync();
             // 创建 WebView2 控件并添加到窗体中
             webView = new WebView2
             {
                 Dock = DockStyle.Fill
             };
             Controls.Add(webView);
             // 确保 WebView2 控件初始化完成
             await webView.EnsureCoreWebView2Async(environment);
             // 设置要加载的页面
             webView.Source = new Uri(BaseUrl.GetBaseUrl() + MyParam);
             // 订阅 WebMessageReceived 事件
             webView.CoreWebView2.WebMessageReceived += OnWebMessageReceived;
         }
         catch (Exception ex)
         {
             // 处理异常并显示消息框
             MessageBox.Show("WebView 初始化失败: " + ex.Message, "初始化错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     }

3、使用 Advanced Installer打包兼容34与64位程序

将debug或者Release文件夹下的 runtimes文件夹打进此包中即可适配多种环境
企业微信截图_17176615115813.png

4、兼容WPS

原理不再赘述,主要是找到WPS的注册表是什么样子的,我们在打包时生成对应的注册表文件即可,下边直接贴图,照图修改即可

企业微信截图_17176622809928.png

三、心得分享

在引入WebView2控件时,博主本地使用visual运行没有任何问题,但是打包之后,一直提示缺少某个组件,为此网上找了不少资料都没有解决,最终在通过阅读源时发现,此控件运行时需要先初始化环境,会用到一个WebView2Loader.dll 但是此控件在打包的过程中却没有被自动添加进去,因此打成的包始终是有问题的,后来新引入了runtimes文件夹后解决此问题,此控件会遍历系统中是否存在WebView2Loader.dll组件,因为博主本地有此环境,所以没有报错,有时候找不到问题的原因,多去阅读源码会有很大的帮助!至此博主学习VSTO开发的路程算是告一段落,希望这些文章能够为正在阅读的你提供一些微不足道的帮助。

  • 39
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值