.NET MAUI加载PDF时如何禁用WebView的保存、另存为选项
禁用.NET MAUI WebView(Windows平台)的保存按钮
在Windows平台上,.NET MAUI的WebView基于EdgeWebView2实现,要禁用自带的保存按钮/选项,可通过自定义平台Handler来配置WebView2的行为,以下是两种实现方案:
方案一:完全禁用上下文菜单
如果不需要保留任何右键菜单,直接关闭上下文菜单功能即可:
- 在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; }; } }
- 在
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
相关产品推荐
相关产品推荐

