You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI加载PDF时如何禁用WebView的保存、另存为选项

禁用.NET MAUI WebView(Windows平台)的保存按钮

在Windows平台上,.NET MAUI的WebView基于EdgeWebView2实现,要禁用自带的保存按钮/选项,可通过自定义平台Handler来配置WebView2的行为,以下是两种实现方案:

方案一:完全禁用上下文菜单

如果不需要保留任何右键菜单,直接关闭上下文菜单功能即可:

  1. 在Windows项目中创建自定义WebViewHandler:
using Microsoft.Maui.Handlers;
using Microsoft.Web.WebView2.Core;

namespace YourAppName.WinUI;

public class CustomWebViewHandler : MauiWebViewHandler
{
    protected override void ConnectHandler(CoreWebView2 platformView)
    {
        base.ConnectHandler(platformView);

        platformView.CoreWebView2Initialized += (sender, e) =>
        {
            // 关闭上下文菜单
            platformView.CoreWebView2.Settings.IsContextMenuEnabled = false;
        };
    }
}
  1. 在MauiProgram.cs中注册该Handler:
using YourAppName.WinUI;

namespace YourAppName;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });

#if WINDOWS
        builder.ConfigureMauiHandlers(handlers =>
        {
            handlers.AddHandler<Microsoft.Maui.Controls.WebView, CustomWebViewHandler>();
        });
#endif

        return builder.Build();
    }
}

方案二:精细过滤保存类菜单选项

如果需要保留其他右键菜单,仅移除保存相关选项,可监听上下文菜单请求事件并过滤:

修改自定义Handler的ConnectHandler方法,添加菜单过滤逻辑:

protected override void ConnectHandler(CoreWebView2 platformView)
{
    base.ConnectHandler(platformView);

    platformView.CoreWebView2Initialized += (sender, e) =>
    {
        // 监听上下文菜单请求事件
        platformView.CoreWebView2.ContextMenuRequested += CoreWebView2_ContextMenuRequested;
    };
}

private void CoreWebView2_ContextMenuRequested(object? sender, CoreWebView2ContextMenuRequestedEventArgs e)
{
    // 移除所有和保存相关的菜单项
    e.MenuItems = e.MenuItems.Where(item => 
        !item.Name.Equals("SaveAs", StringComparison.OrdinalIgnoreCase) &&
        !item.Name.Equals("SaveImage", StringComparison.OrdinalIgnoreCase) &&
        !item.Name.Equals("SaveLinkAs", StringComparison.OrdinalIgnoreCase)).ToList();
}

额外防护:拦截下载请求

为了彻底阻止文件保存,还可以拦截WebView的下载请求:
在CoreWebView2Initialized事件中添加:

platformView.CoreWebView2.DownloadStarting += (sender, e) =>
{
    // 取消所有下载操作
    e.Cancel = true;
};

内容的提问来源于stack exchange,提问作者Samuel Olagesin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:28:33