8. 这些调试器对话框是一个已知 bug。 单击“ 确定” 按钮,然后单击“ 取消 ”按钮关闭对话框。
步骤 6 - 导航事件
在本部分中,将添加用于导入 WebView2 核心库的代码。
1. 在 中 MainWindow.xaml.cs,将以下行添加到顶部,在其他 using 语句的上方:
using Microsoft.Web.WebView2.Core;
托管 WebView2 控件的应用侦听 WebView2 控件在网页导航期间引发的以下事件:
· NavigationStarting
· SourceChanged
· ContentLoading
· HistoryChanged
· NavigationCompleted
如果发生 HTTP 重定向,则一行中有多个 NavigationStarting 事件。
有关详细信息,请参阅 WebView2 应用的导航事件。
发生错误时,将引发以下事件,并可能显示错误网页:
· SourceChanged
· ContentLoading
· HistoryChanged
作为如何使用事件的一个示例,请为 NavigationStarting 注册一个处理程序,以取消任何非 HTTPS 请求,如下所示:
2. 在 MainWindow.xaml.cs构造函数中,添加以下 NavigationStarting 行以注册 EnsureHttps 方法:
public MainWindow()
{
this.InitializeComponent();
MyWebView.NavigationStarting = EnsureHttps;
}
3. 在 MainWindow.xaml.cs的构造函数下方,添加以下 EnsureHttps 方法:
private void EnsureHttps(WebView2 sender, CoreWebView2NavigationStartingEventArgs args)
{
String uri = args.Uri;
if (!uri.StartsWith("https://"))
{
args.Cancel = true;
}
else
{
addressBar.Text = uri;
}
}
4. 选择“ 全部>文件保存 ” (Ctrl Shift S) 保存项目。
5. 按 F5 生成并运行项目。
6. 在应用中的“地址”栏中,输入 HTTP URL(例如 http://bing.com),然后单击“ 转到 ”按钮。
不会发生任何操作,因为 HTTP 站点的导航被阻止,并且我们尚未添加提供反馈的对话。
7. 输入 HTTPS URL(例如 https://bing.com),然后单击“ 转到 ”按钮。
应用导航到指定的页面,因为 HTTPS 网站允许导航。
8. 关闭应用。 可能会出现以下 Visual Studio 对话框:
9. 这些调试器对话框是一个已知 bug。 单击“ 确定” 按钮,然后单击“ 取消 ”按钮关闭对话框。
WinRT CoreWebView2 对象可用性
WinRT CoreWebView2 对象在 WebView2 API 版本中可能不可用。 有关可用 API 的列表,请参阅:
· WinUI 3 API 参考 (Windows 应用 SDK) - Microsoft.UI.Xaml.Controls.WebView2 类 - Windows 桌面应用 > WinRT API 的 API 参考。
· WebView2 规范
步骤 7 - 脚本
可以使用主机应用在运行时将 JavaScript 代码注入 WebView2 控件。 可以任务 WebView2 运行任意 JavaScript 或添加初始化脚本。 注入的 JavaScript 将应用于所有新的顶级文档和任何子帧,直到删除 JavaScript。 注入的 JavaScript 以特定的计时运行,以便:
· 创建全局对象后运行注入的 JavaScript。
· 在运行 HTML 文档中包含的任何其他脚本之前,运行注入的 JavaScript。
例如,接下来,添加在用户尝试打开非 HTTPS 站点时发送警报的脚本。 为此,请将脚本注入到使用 ExecuteScriptAsync 的 Web 内容中。
1. EnsureHttps在 方法中,添加以下ExecuteScriptAsync行:
private void EnsureHttps(WebView2 sender, CoreWebView2NavigationStartingEventArgs args)
{
String uri = args.Uri;
if (!uri.StartsWith("https://"))
{
MyWebView.ExecuteScriptAsync($"alert('{uri} is not safe, try an https link')");
args.Cancel = true;
}
else
{
addressBar.Text = uri;
}
}
2. 选择“ 全部>文件保存 ” (Ctrl Shift S) 保存项目。
3. 按 F5 生成并运行项目。
4. 在应用的“地址”栏中,输入非 HTTPS URL(例如 http://www.bing.com),然后单击“ 转到 ”按钮。
应用的 WebView2 控件显示非 HTTPS 网站的警报对话框,指出非 HTTPS uri 不安全:
5. 关闭应用。 可能会出现以下 Visual Studio 对话框:
6. 这些调试器对话框是一个已知 bug。 单击“ 确定” 按钮,然后单击“ 取消 ”按钮关闭对话框。
恭喜,你构建了第一个 WebView2 应用!
WinUI 3 WebView2 特殊注意事项SmartScreen
WebView2 将应用程序中导航到的 URL 发送到 SmartScreen 服务,以确保客户保持安全。 如果要禁用此导航,可以通过环境变量执行此操作:
· Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--disable-features=msSmartScreenProtection");
必须在创建之前 CoreWebView2 设置此环境变量,这在最初设置 WebView2.Source 属性 或最初调用 WebView2.EnsureCoreWebView2Async 方法 时发生。
设置 DefaultBackgroundColor
在适用于 WinUI 3 的 WebView2 中 DefaultBackgroundColor ,设置存在于 WebView2 XAML 对象上。 例如:
public MainWindow()
{
this.InitializeComponent();
MyWebView.DefaultBackgroundColor = Colors.LightBlue;
}
透明度
WinUI 3 不支持透明背景。 请参阅 WebView2 的透明后台支持? ·问题 #2992。
API 限制
WinUI 3 中无法访问以下类:
· CoreWebView2EnvironmentOptions
· CoreWebView2ControllerOptions
另请参阅
· WebView2 API 参考
· Microsoft Edge WebView2 简介 - 功能概述。
· 管理用户数据文件夹
· WebView2 的示例代码 - 存储库指南 WebView2Samples 。
· WebView2 应用开发最佳做法开发最佳做法
developer.microsoft.com:
· Microsoft Edge WebView2 - developer.microsoft.com WebView2 功能的初始简介。
GitHub:
· 在 WinUI3 中使用 WebView2 的入门
· 规范:WebView2 Xaml 控件 - WebView2 控件的 WinUI 3.0 版本。
· microsoft-ui-xaml 存储库 > 问题 - 输入特定于 WinUI 的功能请求或 bug。
,