WebView2教程(基于C++)【三】加载本地页面

本文介绍了如何在Windows平台的WebView2环境中注册自定义协议,并通过设置虚拟主机映射将https://wv2js/开头的请求指向本地文件夹。同时,提及了配置文件(config.json)的处理和输出目录的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在第一篇文章中,初始化WebView2环境变量的时候注册了一个自定义协议

Microsoft::WRL::ComPtr<ICoreWebView2EnvironmentOptions4> options4;
HRESULT oeResult = options.As(&options4);
const WCHAR* allowed_origins[1] = { L"*" };
auto defaultRegistration = Microsoft::WRL::Make<CoreWebView2CustomSchemeRegistration>(L"wv2js");
defaultRegistration->put_HasAuthorityComponent(TRUE);
defaultRegistration->put_TreatAsSecure(TRUE);
defaultRegistration->SetAllowedOrigins(1, allowed_origins);
ICoreWebView2CustomSchemeRegistration* registrations[1] = { defaultRegistration.Get() };
options4->SetCustomSchemeRegistrations(1, static_cast<ICoreWebView2CustomSchemeRegistration**>(registrations));

这样我们就可以用:https://wv2js这个域名加载我们的自定义页面了,

但要想使用这个域名加载本地页面,还需要做个请求映射,如下代码所示:

auto url = convertToWideChar(wvs[index]["url"].GetString());
if (url.starts_with(L"https://wv2js/")) {
    auto webview3 = webview.try_query<ICoreWebView2_3>();
    webview3->SetVirtualHostNameToFolderMapping(L"wv2js", L"ui", COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_ALLOW);
}

这段代码我们判断配置文件中WebView的默认地址是不是以https://wv2js/开头,如果是,则把这个请求映射到本地路径./ui下。

这段代码要添加到第二篇文章的pageCtrlCallBack方法中

现在我们在龚成中添加这么个静态页面,如下图所示:

需要注意的是,你应该调整以下,这个文件的属性,让它在编译时复制到输出目录

现在启动程序,你将得到一个自定义页面的窗口:

最终输出目录产出的文件是这样的:

体积1M不到。

如你所见,config.json配置文件也被设置成复制到输出目录了。

<think>好的,用户想了解如何使用WebView2,需要教程或示例代码。我需要先整理现有的引用内容,看看有没有相关的信息。现有的引用里提到的主要是Android的WebView、Chromium WebView、Flutter WebView Plugin以及JavaFX的WebView,但用户问的是WebView2,这应该是微软的控件,基于Chromium的Edge浏览器引擎。现有的引用可能没有直接提到WebView2,但可能有相关的知识可以借鉴。 首先,我应该确认用户的需求。WebView2是用于Windows应用的嵌入网页内容的控件,支持Win32、.NET等多种开发环境。用户可能需要基本的集成步骤和示例代码。 虽然现有的引用中没有直接关于WebView2的内容,但可以结合一般WebView的使用方法,加上微软官方文档的建议来回答。比如,环境准备、初始化、加载网页、处理事件等步骤。同时,需要提醒用户参考微软的官方文档,因为不同平台的WebView实现可能有差异。 另外,用户可能对具体的编程语言感兴趣,比如C#或C++,但问题中没有明确说明。因此,回答应该保持通用,或者以常见的C#为例,提供示例代码。 需要确保回答结构清晰,分步骤说明,并生成相关问题。同时,引用标识需要正确对应现有的引用,但现有的引用可能不包含WebView2的信息,所以可能需要指出没有直接引用,但可以参考类似项目结构,如Chromium WebView的示例项目[^1]或Android WebView教程[^3][^4]。 最后,生成相关问题时要围绕WebView2的使用,比如性能优化、与JS交互、跨平台使用等。</think>### WebView2 使用教程及示例代码 #### 一、环境准备 1. **安装 WebView2 Runtime** 必须确保目标设备已安装 [Microsoft Edge WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/)。 2. **开发工具** - Visual Studio 2019 或更高版本(支持 .NET Framework/C++) - 安装 WebView2 SDK(通过 NuGet 包管理器添加) #### 二、基础集成步骤(以 C# WinForms 为例) 1. **添加控件到窗体** 在工具箱中找到 `Microsoft.Web.WebView2.WinForms.WebView2` 控件,拖放到窗体上。 2. **初始化 WebView2** ```csharp private async void InitializeWebView() { await webView21.EnsureCoreWebView2Async(null); webView21.CoreWebView2.Navigate("https://www.example.com"); } ``` 3. **加载本地 HTML** ```csharp string htmlPath = System.IO.Path.Combine(Application.StartupPath, "index.html"); webView21.CoreWebView2.Navigate(htmlPath); ``` 4. **处理导航事件** ```csharp webView21.NavigationStarting += (sender, e) => { // 拦截特定 URL 或显示加载状态 }; ``` #### 、进阶功能示例 1. **JavaScript 与 C# 通信** ```csharp // C# 调用 JS webView21.ExecuteScriptAsync("alert('Hello WebView2!')"); // JS 调用 C#(需注册对象) webView21.CoreWebView2.AddHostObjectToScript("bridge", new JSBridge()); ``` 2. **自定义下载管理** ```csharp webView21.CoreWebView2.DownloadStarting += (sender, e) => { e.Handled = true; // 阻止默认下载 SaveFile(e.DownloadOperation); }; ``` #### 四、参考项目结构 - **Chromium WebView 示例** 展示了如何集成浏览器内核(类似 WebView2 的 Chromium 基础)[^1] - **Android WebView 教程** 提供了事件处理与本地交互的参考模式[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值