Я создаю браузер в VB.Net, используя Cefsharp. Я создал пользовательский 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
, затем, когда браузер инициализируется, он открывается по этому URL-адресу. В другом классе (и в другой форме) у меня есть этот код:
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
, но это тоже не сработало. У кого-нибудь еще есть опыт в этом, или есть какие-либо предложения?
Редактировать:
Я добавил в свой браузер следующие коды, чтобы попытаться избавиться от экземпляра по умолчанию (насколько я понял):
To Form1
:
Module Program
Friend frmMain As Form1
End Module
In Form1_Load
:
`frmMain = Me`
Затем я добавил этот код в LifeSpanHandler
, чтобы отразить изменения:
Dim mainFrm = New Form1()
mainFrm.IntNewTab()
И это не сработало. Он просто продолжал зависать не в фокусе, как и раньше. Я также пытался добавить frmMain.IntNewTab()
(код, который находится в Form1_Load
), и это все равно не сработало.
UI
.LifeSpanHandler
выполняется в одном изCEF
потоков. - person amaitland   schedule 19.06.2015WinForms
пример github.com/cefsharp/CefSharp/ blob/WPF
пример github.com/ cefsharp/CefSharp/blob/ - person amaitland   schedule 19.06.2015