访问newwindow事件中的newwindow

时间:2012-08-25 12:14:18

标签: c# internet-explorer-7 interop webbrowser-control new-window

我在我的应用程序中使用webbrowser控件来从特定网页获取数据。此网页不适用于旧版IE,因为它专门检查IE版本。所以我进行了一次注册表更改,允许我的应用程序以IE 9的形式运行,而且大多数时候一切正常......

问题是必须打开一个新窗口。它不会显示任何内容。我猜新窗口被认为是IE 7,我不知道如何将它伪装成IE9。

我也反过来试过了。我想如果我拦截了新的窗口网址,那么我就可以将它发送到IE9或者在另一个webbrowser控件实例中打开它。但newwindow事件只允许取消该事件。你无法从中获得任何有用的信息。

我认为互操作服务是我需要的,但我对它们一无所知。

所以我有两个问题:
(1)我可以将新窗口识别为IE9吗? (以及如何...)
(2)如何使用互操作服务(或任何我不关心的)获取新窗口URL?

2 个答案:

答案 0 :(得分:1)

在NewWindow事件中,假设您的第一个Wb控件名为WB1,而您想要重定向到的控件是WB2,请在WB1 NW事件中执行以下操作。

Processed = True ' This cancels the current request.
WB2.Navigate URL ' This redirects it to the second WB2 control.

否则,如果要使用NW2(NewWindow2)事件而不是NewWindow(NW)事件,请在WB1控件的NW2事件中执行此操作。

Set ppDisp = WB2.object ' Just swaps the objects around to redirect, don't need to issue a cancel.

此外,您可以通过BeforeNavigate2(WB1)执行此操作。但代码略有不同。

Cancel = True ' Cancel Request.
WB2.Navigate2 URL ' Reissue it to WB2.

现在,只要您控制重定向到的位置,就可以轻松获取新窗口URL,如果我没有弄错的话,可以使用WB2.LocationURL或Wb2.Document.URL。

另外,如果你想将渲染引擎更改为IE9(即使你的计算机上安装了IE9,WB控件也会使用IE7渲染引擎来兼容)...有文章在线和SO上的答案(包括一些我之前的答案)阐明了如何改变注册表以确保WB控件使用的渲染引擎与已安装版本(IE9)的渲染引擎相同,否则,它将始终使用IE7。而且,如果你在机器上安装了IE4,5或6,它将始终使用IE4作为渲染引擎。我认为他们会在3-4版本更改后更新渲染版本。我假设在版本10期间,WB控制渲染版本也将是版本10.

如果您需要更多帮助,请告诉我,我很想知道您是如何相处的,如果这有助于回答您的问题。我的所有示例都在VB6中,但您可以轻松地对其进行转换。

干杯。

答案 1 :(得分:1)

从我的角度来看,很奇怪WebBrowser控件并没有显示出更有用的NewWindow3事件。

This CodeProject article describes a remarkably simple way to make it available.