Internet Explorer 編程簡述(一)WebBrowser還是WebBrowser_V1

來源:互聯網
上載者:User

關鍵字:WebBrowser, WebBrowser_V1,NewWindow, NewWindow2, NewWindow3, INewWindowManager 

你的機器上總是存在著“兩”個WebBrowser,一個叫WebBrowser,另一個叫WebBrowser_V1,其CLASSID如下:

  CLASS_WebBrowser: TGUID = '{8856F961-340A-11D0-A96B-00C04FD705A2}';
  CLASS_WebBrowser_V1: TGUID = '{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}';

它們分別對應的介面是IWebBrowser2和IWebBrowser。問題是我們該用哪一個呢?
按照微軟的推薦,應該盡量使用前者,因為後者是為相容Internet Explorer 3.x而保留的(儘管它能夠響應來自Internet Explorer 3.x、4.x、5.x、6.x的事件),相應的IWebBrowser和IWebBrowserApp介面也應拋棄。

由於Internet Explorer 3.x年代久遠,導致WebBrowser_V1提供的事件少得可憐,但值得一提的是它提供的兩個事件OnNewWindow和OnFrameBeforeNavigate有著與OnBeforeNavigate幾乎相同的參數:

OnBeforeNavigate(
  BSTR URL, 
  long Flags, 
  BSTR TargetFrameName, 
  VARIANT* PostData, 
  BSTR Headers, 
  BOOL FAR* Cancel)

OnNewWindow(
  BSTR URL, 
  long Flags, 
  BSTR TargetFrameName, 
  VARIANT* PostData, 
  BSTR Headers, 
  BOOL FAR* Processed)

OnFrameBeforeNavigate(
  BSTR URL,
  long Flags, 
  BSTR TargetFrameName, 
  VARIANT* PostData, 
  BSTR Headers, 
  BOOL FAR* Cancel)

所以使用WebBrowser_V1使得我們的瀏覽器在有新視窗開啟時能夠輕易捕捉到其URL及相關的資料,如果將Processed設定為TRUE,則可取消新視窗的彈出。同樣,處理Frame也比在WebBrowser中來得容易。

但WebBrowser_V1的致命弱點是它不支援進階介面,如IDocHostUIHandler,即便我們實現了IDocHostUIHandler介面,也不會被WebBrowser_V1調用。所以希望在自己的瀏覽器中實現XP的介面主題、擴充IE的DOM(Document Object Model)等進階控制的話,就肯定不能選擇WebBrowser_V1了。

處理新視窗實在是很麻煩的一件事,不知道微軟為什麼在新版本的OnNewWindow2事件中去掉了URL這樣的參數,而且OnNewWindow2事件不能完全捕捉到所有的新視窗開啟。但如果安裝了Windows XP SP2的話,好處又回來了。

Windows XP SP2對Internet Explorer 6作了升級,並且提供了一個新的事件OnNewWindow3,它在OnNewWindow2事件之前發生,也包含了讓我們能夠加以過濾處理的新視窗的URL等參數,再加上INewWindowManager介面,就是實現Windows XP SP2中過濾廣告視窗功能的基礎。

參考資料:
MSDN:185538 HOWTO: Cause Navigation to Occur in Same WebBrowser Window

引用地址:Internet Explorer 編程簡述(一)WebBrowser還是WebBrowser_V1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.