2

我在我的應用程序中使用webbrowser控件來從特定網頁獲取數據。這個網頁不適用於舊版IE,因爲它專門檢查IE版本。所以我做了一個註冊表變更,允許我的應用程序工作爲IE 9,並且大多數情況下一切正常...訪問newwindow事件內的newwindow

問題是何時必須打開一個新窗口。它不會顯示任何東西。我想這個新窗口被認爲是IE 7,我不知道如何將它僞裝成IE9。

我也嘗試了另一種方式。我認爲如果我攔截了新窗口網址,那麼我可以將它發送到IE9或在另一個webbrowser控件實例中打開它。但新窗口事件只允許取消事件。你無法從中得到任何有用的信息。

我相信互操作服務是我需要的,但我對它們一無所知。

所以我有兩個問題:
(1)我可以讓新窗口識別爲IE9嗎? (以及如何...)
(2)我怎樣才能使用互操作服務(或任何,我不會在乎)的newwindow網址?

回答

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中,但你可以很容易地轉換它們。

乾杯。

+0

謝謝你的答案,但我不明白這一點......我不能讓newwindow名稱或任何事件。網頁打開它,我無法控制它。正如我前面提到的,我對我的瀏覽器控件進行了必要的註冊表更改,將其標識爲IE9,但新窗口似乎標識爲IE7,儘管我不確定這一點 - 我只是認爲它是這樣做的,因爲它不起作用!所以問題是如何訪問我沒有創建的新窗口... – pzogr

+0

@pzogr註冊表的變化使得我們在IE9模式下運行WB控制並不困難,我們將在稍後討論。首先,應該有一個WebBrowser1_NewWindow或WebBrowser1_NewWindow2事件,您可以從事件列表中訪問此事件,首先請確保您可以進入該事件並查看從Visual Studio IDE/Designer自動打印的事件。一旦你完成了這個,讓我知道,我們會從那裏繼續。當然,一旦你發現這一點,隨時檢查變量或將我給你的代碼放在那裏,同時確保你的第二個WebBrowser控件名稱爲WB2,讓我知道 –

+0

首先,我已經說過註冊表的變化到位。我知道在那裏做什麼,我已經做了。關於NewWindow:有一個NewWindow事件,但正如我所說,你只能取消事件(e.cancel = true)。除此之外,您無法訪問NewWindow。 – pzogr