Я пытаюсь использовать элемент управления WebBrowser для запуска новой формы для всплывающих окон вместо ее открытия в IE. Вместо этого я попытался использовать AxWebBrowser, чтобы получить всплывающие окна, которые работают с событием NewWindow3 и просто выполняют e.ppDisp = AxWebBrowser.Application
, но есть много ограничений, связанных с AxWebBrowser. Поэтому вместо этого я пытаюсь расширить обычный WebBrowser, чтобы включить событие NewWindow3, например AxWebBrowser, но столкнулся с проблемами. С e.ppDisp = AxWebBrowser.Application
я получаю ошибки: «Обнаружен InvalidVariant», а затем «Указанный вариант OLE недействителен», если я продолжаю.
Примечание. Это мой первый раз, когда я расширяю класс, поэтому я мог упустить что-то простое. Если я попытаюсь просто перейти к новому URL-адресу в новом окне, я получу ошибки java-скрипта с сайта.
Я обновил базу кода по комментариям. Удален класс ExtendedWebBrowser для более компактной и приятной версии. Вот новый код:
Из основной формы и очень похожей формы BrowserPopup —
Protected Overrides Sub OnLoad(ByVal e As EventArgs)
MyBase.OnLoad(e)
nativeBrowser = DirectCast(ExtendedWebBrowser1.ActiveXInstance, SHDocVw.WebBrowser)
AddHandler nativeBrowser.NewWindow3, AddressOf nativeBrowser_NewWindow3
AddHandler nativeBrowser.WindowClosing, AddressOf nativeBrowser_WindowClosing
End Sub
Private Sub nativeBrowser_NewWindow3(ByRef ppDisp As Object, ByRef Cancel As Boolean, ByVal dwflags As UInteger, ByVal bStrUrlContext As String, ByVal bstrUrl As String)
Dim popup = New BrowserPopup()
popup.Show(Me)
popup.browserPop.DocumentText = bStrUrlContext
ppDisp = popup.browserPop.ActiveXInstance
End Sub
Private Sub nativeBrowser_WindowClosing(ByVal IsChildWindow As Boolean, ByRef Cancel As Boolean)
MsgBox("working?") '<<<Doesn't Trigger>>>
End Sub
Protected Overrides Sub OnFormClosing(ByVal e As FormClosingEventArgs)
MyBase.OnFormClosing(e)
End Sub
Кроме того, если это поможет, вот сценарий со страницы, который должен иметь возможность закрывать всплывающую форму, но вместо этого просто деактивирует веб-браузер.
<table isListBtn="false" cellpadding="0" enabled="true" class="buttonBorderBlue"
cellspacing="0" border="0" onClick="if (typeof(workpaneMediator_toolbar)!='undefined')
workpaneMediator_toolbar.onSelect('CANCEL_ACTION', this)"
actionType="CLOSE_WINDOW_TYPE" id="workpaneMediator_toolbar_CANCEL_ACTIONWrapper"
nowrap><tr><td class="buttonBlueTD">
WebBrowser
из JavaScript — это другое дело. Вы смотрели на событие WindowClosing базовый элемент управленияWebBrowser
ActiveX? - person noseratio   schedule 30.10.2013WindowClosing
тоже не улавливает. Собираюсь обновить код в моем исходном посте, чтобы отразить последние изменения. - person Congree   schedule 30.10.2013