【发布时间】:2013-11-06 07:57:39
【问题描述】:
我正在尝试使用 WebBrowser 控件为弹出窗口启动一个新表单,而不是在 IE 中打开它。我尝试使用 AxWebBrowser 来获取与 NewWindow3 事件一起使用的弹出窗口,并且只执行 e.ppDisp = AxWebBrowser.Application,但是 AxWebBrowser 有很多限制。因此,我试图扩展普通的 WebBrowser 以包含像 AxWebBrowser 这样的 NewWindow3 事件,但遇到了问题。使用e.ppDisp = AxWebBrowser.Application,我收到错误消息:“检测到 InvalidVariant”,如果我继续,后跟“指定的 OLE 变体无效”。
注意:这是我第一次扩展一个类,所以我可能会忽略一些简单的东西。如果我尝试在新窗口中导航到新 URL,我会从该站点收到 java 脚本错误。
我已经更新了 cmets 的代码库。已删除 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">
【问题讨论】:
-
已回答here 用于 C#,转换为 VB 应该不成问题。
-
感谢您的回复!我能够转换代码并将其实现为我自己的。它现在弹出没有错误,并且在大多数情况下都正确运行脚本。但是,当单击 java 脚本按钮提交/取消弹出窗口时,Web 浏览器确实停止运行(应该如此),但弹出表单并没有消失。我正在研究,看看能不能找到任何东西。
-
对于 JavaScript 链接,请查看this one。
-
您为 JavaScripts 提供的链接似乎对我没有多大作用。为了清楚起见,我现在已经删除了 WebBrowserEx 类,拿起你第一次发布的项目。这成功地以新形式打开了弹出窗口,没有错误。但是,当尝试单击新表单上的提交/关闭时,WebBrowser 似乎已停用,就像被告知要关闭一样。但表单本身不会自动关闭。我尝试从 WebBrowser 检查各种事件,但如果有任何事件被调用,似乎找不到任何事件。
-
WindowClosing似乎也没有引起注意。将更新我原始帖子中的代码以反映最近的更改。
标签: browser webbrowser-control vb.net-2010 popupwindow axwebbrowser