• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            旅途

            如果想飛得高,就該把地平線忘掉

            Internet Explorer編程簡述(一)

             一直對Microsoft Internet Explorer編程非常感興趣,曾花了不少時間琢磨,也與眾多網友討論過問題,2000年將心得寫成一篇《TWebBrowser編程簡述》,發表在自己的個人主頁“阿甘的家”上,得到了不少網友的回應,也被許多網站轉載。此后相當長的時間內不斷回答網友的提問,收獲良多。

              其間正是多窗口瀏覽器全面開花的日子,無奈手頭事情太多,我的作品Multiple iExplorer也一直未能問世,至今遺憾。后來常與GoSurf的作者交流學習,替他解決了不少問題,也從他那里學到許多。如今GoSurf有了比較 固定的用戶群,有我一份功勞,算是一種安慰吧,他也一度在GoSurf官方主頁上將我列為核心技術支持,但我后來因為工作和學習的關系很少再和他聯系,實 在慚愧。

              回頭再看當時的文章,錯誤實在不少,認識也比較淺薄,有些問題更是一直沒有得到解決,所以我覺得有必要在前文的基礎上,花點時間將我積累的關于Internet Explorer編程的問題比較完整地寫出來,希望對自己有個交代,對大家有一些幫助。

              是為序。

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

              你的機器上總是存在著“兩”個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中過濾廣告窗口功能的基礎。


            posted on 2007-07-29 15:08 旅途 閱讀(655) 評論(0)  編輯 收藏 引用 所屬分類: BHO

            欧美伊人久久大香线蕉综合69| 漂亮人妻被中出中文字幕久久| 国内精品伊人久久久久AV影院| 精品国产乱码久久久久久1区2区 | 精品久久久久久久久久久久久久久| 91性高湖久久久久| 精品伊人久久久| 国产精品久久网| 久久久久久精品久久久久| 久久99精品国产麻豆宅宅| 日韩十八禁一区二区久久| 99久久国语露脸精品国产| 久久夜色精品国产亚洲av| 国产成人久久精品激情| 中文精品99久久国产| 狠狠综合久久综合中文88| 无遮挡粉嫩小泬久久久久久久| 久久99精品免费一区二区| 久久精品国产亚洲AV无码偷窥| 欧美久久天天综合香蕉伊| 久久久精品一区二区三区| 性高湖久久久久久久久| 亚洲精品tv久久久久久久久久| 亚洲综合精品香蕉久久网97| 性欧美丰满熟妇XXXX性久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 精品综合久久久久久97| 欧美午夜精品久久久久久浪潮| 久久精品国产99国产精品澳门| 久久久久久久女国产乱让韩| 久久综合九色综合久99| 久久国产乱子伦精品免费午夜| 久久精品国产亚洲麻豆| 精品久久一区二区三区| 久久精品毛片免费观看| 亚洲熟妇无码另类久久久| 久久AV高潮AV无码AV| 亚洲日韩中文无码久久| 五月丁香综合激情六月久久 | 大蕉久久伊人中文字幕| 亚洲国产成人久久精品影视|