如何重置WebView2控件以阻止用户回退到之前加载的页面?
如何重置WebView2控件以阻止用户回退到之前加载的页面?
我太懂你这个需求了!在.NET Framework 4.8项目里用WebView2做PDF预览,用户切换文件后总不能让他们还能回退到上一个PDF对吧?给你几个亲测好用的解决方案:
- 方案一:加载新PDF后清空浏览历史
这是最直接的办法,每次加载完新的PDF,直接把WebView2的浏览历史清掉,这样回退按钮直接变灰,用户根本没机会回退。
VB.NET代码示例:
' 确保CoreWebView2已经初始化完成再调用 Await WebView21.CoreWebView2.ClearBrowsingDataAsync(DateTime.MinValue, DateTime.MaxValue, CoreWebView2BrowsingDataKinds.History)
C#代码示例:
await webView21.CoreWebView2.ClearBrowsingDataAsync(DateTime.MinValue, DateTime.MaxValue, CoreWebView2BrowsingDataKinds.History);
要是不想清空所有历史,还能调整CoreWebView2BrowsingDataKinds的参数,精准只清浏览记录。
- 方案二:直接拦截回退操作
如果不想动历史记录,那就把回退行为直接拦住。监听导航开始事件,判断是不是回退请求,是的话直接取消:
VB.NET示例:
Private Sub WebView21_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles WebView21.CoreWebView2InitializationCompleted AddHandler WebView21.CoreWebView2.NavigationStarting, AddressOf BlockBackNavigation End Sub Private Sub BlockBackNavigation(sender As Object, e As CoreWebView2NavigationStartingEventArgs) ' 检测到是回退导航就取消 If e.NavigationReason = CoreWebView2NavigationReason.Backward Then e.Cancel = True End If End Sub
C#示例:
private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e) { webView21.CoreWebView2.NavigationStarting += BlockBackNavigation; } private void BlockBackNavigation(object sender, CoreWebView2NavigationStartingEventArgs e) { if (e.NavigationReason == CoreWebView2NavigationReason.Backward) { e.Cancel = true; } }
- 方案三:直接重置WebView2控件
要是上面两种都不合心意,那就狠一点——直接销毁旧控件,重新创建一个新的。这样相当于完全清零,之前的所有状态、历史都没了:
VB.NET示例:
' 销毁旧控件 WebView21.Dispose() ' 创建新控件并添加到容器 WebView21 = New WebView2() PreviewPanel.Controls.Add(WebView21) WebView21.Dock = DockStyle.Fill ' 初始化新控件并加载PDF Await WebView21.EnsureCoreWebView2Async(Nothing) WebView21.Source = New Uri("新的PDF文件路径")
C#示例:
// 销毁旧控件 webView21.Dispose(); // 创建新控件并配置 webView21 = new WebView2(); previewPanel.Controls.Add(webView21); webView21.Dock = DockStyle.Fill; // 初始化后加载新PDF await webView21.EnsureCoreWebView2Async(null); webView21.Source = new Uri("新的PDF文件路径");
个人最推荐第一种方案,操作简单还不影响当前预览状态,完全够用!
内容来源于stack exchange
相关产品推荐
相关产品推荐

