IE で開く代わりに、WebBrowser コントロールを使用してポップアップ用の新しいフォームを起動しようとしています。代わりに AxWebBrowser を使用して、NewWindow3 イベントで動作するポップアップを取得しようとしましたが、AxWebBrowser にe.ppDisp = AxWebBrowser.Application
は多くの制限があります。代わりに、通常の WebBrowser を拡張して、AxWebBrowser のような NewWindow3 イベントを含めようとしていますが、問題が発生しています。続行すると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
また、それが役立つ場合は、ポップアップフォームを閉じることができるはずのページからのスクリプトを次に示しますが、代わりに WebBrowser を無効にしているようです。
<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">