如何在VB.NET CefSharp中实现在同一窗口打开页面
解决CefSharp ChromiumWebBrowser新窗口打开链接的问题
要让百度页面内的链接在原窗口打开,你需要通过自定义ILifeSpanHandler拦截新窗口创建请求,修改后的完整代码如下:
Imports CefSharp Imports CefSharp.Handler Imports CefSharp.WinForms Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ChromiumWebBrowser1.Load("https://www.baidu.com") End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 设置自定义的生命周期处理器 ChromiumWebBrowser1.LifeSpanHandler = New CustomLifeSpanHandler(Me.ChromiumWebBrowser1) End Sub Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing ' 清理Cef资源,避免内存泄漏 Cef.Shutdown() End Sub Private Sub bt_Click(sender As Object, e As EventArgs) Handles bt.Click TextBox1.Text = ChromiumWebBrowser1.Address End Sub End Class ' 自定义生命周期处理器,拦截新窗口请求 Public Class CustomLifeSpanHandler Inherits LifeSpanHandler Private ReadOnly _browser As ChromiumWebBrowser Public Sub New(browser As ChromiumWebBrowser) _browser = browser End Sub Public Overrides Function OnBeforePopup(browser As IWebBrowser, browserFrame As IBrowserFrame, targetUrl As String, targetFrameName As String, targetDisposition As WindowOpenDisposition, userGesture As Boolean, popupFeatures As IPopupFeatures, windowInfo As IWindowInfo, client As IBrowserSettings, ByRef noJavascriptAccess As Boolean, ByRef newBrowser As IWebBrowser) As Boolean ' 在当前控件加载新链接 _browser.Load(targetUrl) ' 返回True取消默认的新窗口创建 Return True End Function End Class
关键说明:
- 在
Form1_Load事件中,给ChromiumWebBrowser1绑定自定义的LifeSpanHandler - 自定义的
CustomLifeSpanHandler继承自LifeSpanHandler,重写OnBeforePopup方法捕获新窗口的目标URL,让当前控件直接加载该地址,返回True阻止默认的新窗口弹出行为 - 在
Form1_FormClosing中添加Cef.Shutdown(),确保程序关闭时正确清理Cef资源,避免内存泄漏
内容的提问来源于stack exchange,提问作者Lee Trom
相关产品推荐
相关产品推荐

