資源描述:
《internetexplorer編程簡(jiǎn)述》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、InternetExplorer編程簡(jiǎn)述(一) 一直對(duì)MicrosoftInternetExplorer編程非常感興趣,曾花了不少時(shí)間琢磨,也與眾多網(wǎng)友討論過(guò)問(wèn)題,2000年將心得寫成一篇《TWebBrowser編程簡(jiǎn)述》,發(fā)表在自己的個(gè)人主頁(yè)“阿甘的家”上,得到了不少網(wǎng)友的回應(yīng),也被許多網(wǎng)站轉(zhuǎn)載。此后相當(dāng)長(zhǎng)的時(shí)間內(nèi)不斷回答網(wǎng)友的提問(wèn),收獲良多。 其間正是多窗口瀏覽器全面開花的日子,無(wú)奈手頭事情太多,我的作品MultipleiExplorer也一直未能問(wèn)世,至今遺憾。后來(lái)常與GoSurf的作者交流學(xué)習(xí),替他解決了不少問(wèn)題,也從他那里學(xué)到許多。如今GoSurf有
2、了比較固定的用戶群,有我一份功勞,算是一種安慰吧,他也一度在GoSurf官方主頁(yè)上將我列為核心技術(shù)支持,但我后來(lái)因?yàn)楣ぷ骱蛯W(xué)習(xí)的關(guān)系很少再和他聯(lián)系,實(shí)在慚愧。 回頭再看當(dāng)時(shí)的文章,錯(cuò)誤實(shí)在不少,認(rèn)識(shí)也比較淺薄,有些問(wèn)題更是一直沒(méi)有得到解決,所以我覺(jué)得有必要在前文的基礎(chǔ)上,花點(diǎn)時(shí)間將我積累的關(guān)于InternetExplorer編程的問(wèn)題比較完整地寫出來(lái),希望對(duì)自己有個(gè)交代,對(duì)大家有一些幫助?! ∈菫樾?。 InternetExplorer編程簡(jiǎn)述(一)WebBrowser還是WebBrowser_V1 你的機(jī)器上總是存在著“兩”個(gè)WebBrowser,一個(gè)叫We
3、bBrowser,另一個(gè)叫WebBrowser_V1,其CLASSID如下: CLASS_WebBrowser:TGUID='{8856F961-340A-11D0-A96B-00C04FD705A2}'; CLASS_WebBrowser_V1:TGUID='{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}'; 它們分別對(duì)應(yīng)的接口是IWebBrowser2和IWebBrowser。問(wèn)題是我們?cè)撚媚囊粋€(gè)呢? 按照微軟的推薦,應(yīng)該盡量使用前者,因?yàn)楹笳呤菫榧嫒軮nternetExplorer3.x而保留的(盡管它能夠響應(yīng)來(lái)自Int
4、ernetExplorer3.x、4.x、5.x、6.x的事件),相應(yīng)的IWebBrowser和IWebBrowserApp接口也應(yīng)拋棄?! ∮捎贗nternetExplorer3.x年代久遠(yuǎn),導(dǎo)致WebBrowser_V1提供的事件少得可憐,但值得一提的是它提供的兩個(gè)事件OnNewWindow和OnFrameBeforeNavigate有著與OnBeforeNavigate幾乎相同的參數(shù): OnBeforeNavigate( BSTRURL, longFlags, BSTRTargetFrameName, VARIANT*PostData, BSTR
5、Headers, BOOLFAR*Cancel) OnNewWindow( BSTRURL, longFlags, BSTRTargetFrameName, VARIANT*PostData, BSTRHeaders, BOOLFAR*Processed) OnFrameBeforeNavigate( BSTRURL, longFlags, BSTRTargetFrameName, VARIANT*PostData, BSTRHeaders, BOOLFAR*Cancel) 所以使用WebBrowser_V1使得我們的瀏覽器在有新窗
6、口打開時(shí)能夠輕易捕捉到其URL及相關(guān)的數(shù)據(jù),如果將Processed設(shè)置為TRUE,則可取消新窗口的彈出。同樣,處理Frame也比在WebBrowser中來(lái)得容易。 但WebBrowser_V1的致命弱點(diǎn)是它不支持高級(jí)接口,如IDocHostUIHandler,即便我們實(shí)現(xiàn)了IDocHostUIHandler接口,也不會(huì)被WebBrowser_V1調(diào)用。所以希望在自己的瀏覽器中實(shí)現(xiàn)XP的界面主題、擴(kuò)展IE的DOM(DocumentObjectModel)等高級(jí)控制的話,就肯定不能選擇WebBrowser_V1了?! √幚硇麓翱趯?shí)在是很麻煩的一件事,不知道微軟為什
7、么在新版本的OnNewWindow2事件中去掉了URL這樣的參數(shù),而且OnNewWindow2事件不能完全捕捉到所有的新窗口打開。但如果安裝了WindowsXPSP2的話,好處又回來(lái)了。 WindowsXPSP2對(duì)InternetExplorer6作了升級(jí),并且提供了一個(gè)新的事件OnNewWindow3,它在OnNewWindow2事件之前發(fā)生,也包含了讓我們能夠加以過(guò)濾處理的新窗口的URL等參數(shù),再加上INewWindowManager接口,就是實(shí)現(xiàn)WindowsXPSP2中過(guò)濾廣告窗口功能的基礎(chǔ)。InternetExplorer編程簡(jiǎn)述(二) Intern
8、etExp