C# 在newwindow事件中访问newwindow

C# 在newwindow事件中访问newwindow,c#,internet-explorer-7,interop,webbrowser-control,new-window,C#,Internet Explorer 7,Interop,Webbrowser Control,New Window,我在应用程序中使用webbrowser控件从特定网页获取数据。此网页不适用于旧版IE,因为它专门检查IE版本。所以我做了一个注册表更改,允许我的应用程序像IE 9一样工作,并且大部分时间一切正常 问题是何时必须打开新窗口。它不会显示任何内容。我猜newwindow被公认为IE7,我不知道如何让它伪装成IE9 我也试过另一种方法。我想如果我截取了NewWindowURL,那么我可以将它发送到IE9,或者在webbrowser控件的另一个实例中打开它。但是newwindow事件只允许取消该事件。你无

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

问题是何时必须打开新窗口。它不会显示任何内容。我猜newwindow被公认为IE7,我不知道如何让它伪装成IE9

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

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

所以我有两个问题:
(1) 我可以将新窗口标识为IE9吗?(以及如何…)

(2) 在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 control也将使用IE7渲染引擎以实现兼容性)。。。在线文章和答案(包括我以前的一些答案)阐明了如何更改注册表,以确保WB控件使用的渲染引擎与已安装版本(IE9)的渲染引擎相同,否则,它将始终使用IE7。而且,如果计算机上安装了IE4、5或6,则渲染引擎将始终使用IE4。我认为他们会在3-4次版本更改后更新渲染版本。我假设在版本10期间,WB控件渲染版本也将是版本10

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

干杯。

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


谢谢你的回答,但我不明白。。。我无法获取新窗口名称或任何事件。网页打开了,我无法控制它。正如我前面提到的,我做了必要的注册表更改,使我的webbrowser控件被标识为IE9,但新窗口似乎被标识为IE7,尽管我不确定——我只是认为这样做是因为它不起作用!所以问题是如何访问我没有创建的新窗口…@pzogr注册表更改以使我们的WB控件在IE9模式下运行并不困难,我们稍后将讨论这个问题。首先,应该有一个WebBrowser1_NewWindow或WebBrowser1_NewWindow2事件,您可以从事件列表中访问它,让我们首先确保您可以进入其中并查看从visual studio IDE/设计器自动打印出来的事件。一旦你做到了这一点,让我知道,我们将继续从那里。当然,一旦您找到了这个,请随意检查变量或将我给您的代码放在其中,同时确保您的第二个WebBrowser控件是names WB2,首先让我知道,我已经说过注册表更改已经到位。关于NewWindow:有一个NewWindow事件,但正如我所说,您只能取消该事件(e.cancel=true)。除此之外,您没有访问NewWindow的权限。@pzogr请告诉我您在NewWindow事件中看到的参数,如果可以,请尝试使用NewWindow2。当事件方法自动生成时,请复制并粘贴自动生成的NewWindow2和NewWindow事件代码中显示的参数,我们将从中获取这些参数。另外,关于regedit,您说过第二个窗口可能无法识别为IE9,这就是为什么我仍在尝试帮助您,因为regeidt应该确保它可以在表单上的两个WB控件上工作。要确定,请访问您的WB控件,您将确定。感谢您抽出时间提供帮助!关于注册表:我用javascript代码编写了一个简单的html,打开了一个新窗口,导航到whatsmyuseragent.com,并证明我最初的假设是错误的!新窗口正确标识为IE9。我不明白为什么它不能工作,所以在我看来,最好的解决方案是拒绝新窗口并将url发送到webbrowser控件。我没有newwindow2事件,因为我使用webbrowser控件。我将尝试使用axWebBrowser并告诉您结果。