Maui x Blazor,禁用保存的输入信息建议

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

我有一个 MAUI 应用程序,它通过 BlazorWebView 显示 Blazor 表单。该应用程序目前预计仅在 Windows 桌面上使用。 由于 Webview 在底层使用 Microsoft Edge WebView2,因此它自然也利用了一些 Edge 浏览器功能。

在 Edge 中,当您将焦点放在给定的输入字段中时,可能会出现一个弹出窗口,其中显示一些先前输入的信息,您只需单击一个选项即可填写该字段。 example of the popup on the edge browser itself

对于我的应用程序来说,拥有这样的弹出窗口远不方便,而且我相信它隐藏了更多有用的东西。

现在,当边缘浏览器本身遇到此问题时,如上图所示,您有一个特定的按钮可以引导您进入浏览器设置,并让您完全禁用浏览器的该选项,这将是一个很好的选择对我来说足够的解决方案。

哈拉斯,这次从 web 视图运行相同的代码时,就是这个样子。same popup, but running from the MAUI Blazor Webview

如您所见,这次没有任何设置,因为我们实际上并未在浏览器本身中运行。

我想知道是否有办法在运行客户端的计算机上进行配置,或者直接阻止它进行某种应用程序配置。

blazor microsoft-edge maui webview2 maui-blazor
2个回答
2
投票

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
    }
}

0
投票

补充答案,如果指示 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() 方法。

其他参考:为什么我的 coreWebView2(webView2 的对象)为 null?

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