我有一个 MAUI 应用程序,它通过 BlazorWebView 显示 Blazor 表单。该应用程序目前预计仅在 Windows 桌面上使用。 由于 Webview 在底层使用 Microsoft Edge WebView2,因此它自然也利用了一些 Edge 浏览器功能。
在 Edge 中,当您将焦点放在给定的输入字段中时,可能会出现一个弹出窗口,其中显示一些先前输入的信息,您只需单击一个选项即可填写该字段。
对于我的应用程序来说,拥有这样的弹出窗口远不方便,而且我相信它隐藏了更多有用的东西。
现在,当边缘浏览器本身遇到此问题时,如上图所示,您有一个特定的按钮可以引导您进入浏览器设置,并让您完全禁用浏览器的该选项,这将是一个很好的选择对我来说足够的解决方案。
哈拉斯,这次从 web 视图运行相同的代码时,就是这个样子。
如您所见,这次没有任何设置,因为我们实际上并未在浏览器本身中运行。
我想知道是否有办法在运行客户端的计算机上进行配置,或者直接阻止它进行某种应用程序配置。
CoreWebView2Settings 类上有一个 setting 可以为 Windows(即 Microsoft Edge WebView2)执行此操作:
IsGeneralAutofillEnabled
,它确实默认为 true。
现在的问题是了解如何访问该配置设置。
在拥有 Web 视图的页面上,确保 Web 视图具有
x:Name
值,以便从后面的代码中引用它。
然后在该组件/页面后面的代码中,您可以简单地执行此操作 (blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2).CoreWebView2.Settings.IsGeneralAutofillEnabled = false;
,其中 blazorWebView
是 Web 视图的实际 x:Name
。
另外不要忘记使用
#if endif
指令进行保护,因为此强制转换仅适用于 Windows,并且在构造期间不会填充 blazorWebView
的实例,因此您可以使用 Loaded
事件来配置它仅当页面实际旋转时。
以下是包含 WebView 透视图的页面的 .cs 文件中的结果。
public partial class MainPage : ContentPage
{
public MainPage()
{
Loaded += MainPage_Loaded;
InitializeComponent();
}
private void MainPage_Loaded(object sender, EventArgs e)
{
#if WINDOWS
(blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2).CoreWebView2.Settings.IsGeneralAutofillEnabled = false;
#endif
}
}
补充答案,如果指示 blazor 路由的 MainPage 定义为:
,则可以轻松禁用 Blazor 中配置为自动填充的 webview public partial class MainPage : ContentPage
{
public MainPage()
{
Loaded += MainPage_Loaded;
InitializeComponent();
}
private async void MainPage_Loaded(object? sender, EventArgs e)
{
#if WINDOWS
await (blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2).EnsureCoreWebView2Async();
(blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2).CoreWebView2.Settings.IsGeneralAutofillEnabled = false;
#endif
}
}
CoreWebView2组件异步启动,因此在操作其属性之前需要使用await和 EnsureCoreWebView2Async() 方法。