2

我在我的应用程序中使用 webbrowser 控件从特定网页获取数据。此网页不适用于旧版 IE,因为它专门检查 IE 版本。所以我做了一个注册表更改,允许我的应用程序作为 IE 9 工作,并且大部分时间一切正常......

问题是何时必须打开一个新窗口。它不会显示任何东西。我猜newwindow被承认为IE 7,我不知道如何让它伪装成IE9。

我也尝试了相反的方法。我认为如果我截获了新窗口 url,那么我可以将它发送到 IE9 或在另一个 webbrowser 控件实例中打开它。但是 newwindow 事件只允许取消事件。你不能从中得到任何有用的信息。

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

所以我有两个问题:
(1)我可以让新窗口识别为IE9吗?(以及如何...)
(2)如何使用互操作服务(或任何东西,我不在乎)获取新窗口 url?

4

2 回答 2

1

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

这篇 CodeProject 文章描述了一种非常简单的方法来使其可用。

于 2012-10-10T16:35:14.447 回答
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.

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

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

如果您需要更多帮助,请告诉我,我很想知道您的相处方式以及这是否有助于回答您的问题。我所有的例子都在 VB6 中,但是你可以很容易地转换它们。

干杯。

于 2012-08-31T12:12:36.920 回答