我正在使用Cefsharp在VB.Net中创建一个浏览器。我创建了一个自定义LifeSpanHandler
来处理弹出窗口,但是当我尝试在另一个类中调用Public Sub时,它没有给出预期的输出。
我使用以下代码创建了LifeSpanHandler
:
Public Class LifeSpanHandler
Implements ILifeSpanHandler
Public Event PopupRequest As Action(Of String)
Public Function OnBeforePopup(browser As IWebBrowser, sourceUrl As String, targetUrl As String, ByRef x As Integer, ByRef y As Integer, ByRef width As Integer, ByRef height As Integer) As Boolean Implements ILifeSpanHandler.OnBeforePopup
RaiseEvent PopupRequest(targetUrl)
My.Settings.newpage = targetUrl
Call Form1.IntNewTab()
Return True
End Function
Public Sub OnBeforeClose(browser As IWebBrowser) Implements ILifeSpanHandler.OnBeforeClose
End Sub
End Class
然后我将browser.LifeSpanHandler = New LifeSpanHandler
初始化。 (browser
为CefSharp.WinForms.ChromiumWebBrowser
)
我将targetURL
保存在My.Settings.newpage
中,然后在初始化浏览器时,它会打开该网址。在另一个类(和不同的表单)中,我有这个代码:
Public Sub IntNewTab()
Dim tab As New TabPage
Dim newtab As New tabs
newtab.Show()
newtab.Dock = DockStyle.Fill
newtab.TopLevel = False
tab.Controls.Add(newtab)
Me.CustomTabControl1.TabPages.Add(tab)
Me.PictureBox1.Location = New System.Drawing.Point(PictureBox1.Location.X + 150, 3)
My.Settings.newpage = My.Settings.homepage
Me.CustomTabControl1.SelectedTab = tab
End Sub
添加新标签的代码是什么。但在我的LifeSpanHandler
中,当我Call Form1.IntNewTab()
时,浏览器冻结了焦点。窗口显示为灰色(意味着它没有聚焦),我无法将其拖动,并且它始终位于其他所有位置之上,我无法与浏览器的任何部分进行交互。
为了测试其他内容,我向Form1
添加了一个按钮,其中包含来自IntNewTab
的确切代码,当我点击它时,它会像正常一样打开指定页面的新标签。我也试过让按钮可见,并OnBeforePopup
添加Form1.Button1.PerformClick
,但这也不起作用。其他人都有这方面的经验,或有任何建议吗?
编辑:
我在浏览器中添加了以下代码,试图摆脱默认实例(我理解的最好):
至Form1
:
Module Program
Friend frmMain As Form1
End Module
在Form1_Load
:
`frmMain = Me`
然后我在LifeSpanHandler
中添加了此代码以反映更改:
Dim mainFrm = New Form1()
mainFrm.IntNewTab()
这不起作用。它像以前一样不停地聚焦。我还尝试添加frmMain.IntNewTab()
(Form1_Load
中的代码),但它仍无效。