UI 特定的 WebView2 与 CoreWebView2Controller;了解差异以及它是否重要

问题描述 投票:0回答:1

我在

WebView2
上有一个
Form
控件。

我设置了一个用户数据文件夹(UDF)并像这样初始化:

CoreWebView2Environment environment = await CoreWebView2Environment.CreateAsync(userDataFolder: "<some_path>");
await webView.EnsureCoreWebView2Async(environment);
// use webView2.CoreWebView2 below

webView2
是我的
Form
上的私人领域。

我正在探索在一个 UDF 中创建单独的配置文件,而不是如此处

所述的单独 UDF

这样做看起来像:

CoreWebView2Environment environment = await CoreWebView2Environment.CreateAsync(userDataFolder: "<some_path>");
CoreWebView2ControllerOptions options = environment.CreateCoreWebView2ControllerOptions();
options.ProfileName = "MyProfileName";
options.IsInPrivateModeEnabled = true;
CoreWebView2Controller controller = await environment.CreateCoreWebView2ControllerAsync(this.Handle, options);
// reference controller.CoreWebView2 below

但是现在,我不需要表单上的私有

webView
控件,而是需要使用
CoreWebView2Controller
的 API
而不是
WebView2
的 API

所以我没有

KeyDown
事件处理程序,需要使用
AcceleratorKeyPressed
并且控制器上显然没有我之前依赖的
Invoke(...)
方法。

我还没有发现是否存在与此 API 差异相关的对我来说很重要的限制,但我正在尝试了解使用 Controller 与 WinForm 的含义

WebView2
。根据人们的经验,这种差异重要吗?

(出现的参考

c# winforms webview2
1个回答
0
投票

TLDR:如果您使用 WebView2 为其提供

WebView2
控件(WinForms、WPF、WinUI2、WinUI3)的 UI 框架,建议使用该
WebView2
控件类。您可以编写应用程序来直接使用
CoreWebView2Controller
,但需要大量工作来连接 WebView2 控件已执行的托管的所有方面。

有关

WebView2
CoreWebView2Controller
的差异的详细信息:本文档WebView2的主类更详细地描述了这一点,但总结了您所询问的部分:

  • CoreWebView2Controller
    类提供直接托管
    CoreWebView2
    所需的原始访问权限。它不了解特定的 UI 框架,而是提供对将其集成到 UI 框架控件或直接集成到您的应用程序所需的所有功能的直接访问。
  • 还有针对不同UI框架(WinForms、WPF、WinUI2、WinUI3)的WebView2控件类。它们包装了
    CoreWebView2Controller
    并将其与 UI 框架集成。底层
    CoreWebView2Controller
    不直接暴露,而是由
    WebView2
    控制类将
    CoreWebView2Controller
    行为连接到相应的 UI 框架机制,或者
    WebView2
    控制类公开行为本身。

CoreWebView2ControllerOptions
WebView2
控件一起使用
:您可以将
CoreWebView2ControllerOptions
WebView2
控件类一起使用来更改 WebView2 配置文件。在初始化 WebView2 控件之前,您可以调用
EnsureCoreWebView2Async
方法。这包括在设置其 Source 属性之前,该属性也开始初始化。

© www.soinside.com 2019 - 2024. All rights reserved.