運(yùn)行調(diào)試Visual Studio 2005程序
Visual Studio 2005程序包括許多新的和改進(jìn)的用于提高工作效率的功能。Visual Studio 2005程序還進(jìn)行了重新設(shè)計,從而向開發(fā)人員提供對.NET Framework 組件的直接訪問,因此可以在使用的過程當(dāng)中感受到趣味性和吸引力。
創(chuàng)建一個簡單的“瀏覽器幫助程序?qū)ο蟆?BHO),即實(shí)現(xiàn) IObjectWithSite 接口并將其自身附加到 Internet Explorer 的一種“組件對象模型”(COM) 對象。本文逐步說明了如何創(chuàng)建入門級 BHO。首先,BHO 會在 Internet Explorer 加載文檔時顯示消息“大家好!”。然后,BHO 被擴(kuò)展為從已加載頁面刪除圖像。本文面向的是想要了解如何擴(kuò)展瀏覽器功能以及如何為 Internet Explorer 創(chuàng)建 Web 開發(fā)人員工具的開發(fā)人員(本文還包含指向英文網(wǎng)頁的鏈接)。
簡介
本文憑借 Visual Studio 2005程序和“活動模板庫”(ATL) 來開發(fā)使用 C++ 的 BHO。我們之所以決定使用 ATL,是因?yàn)樗奖愕貙?shí)現(xiàn)了我們可以按需進(jìn)行擴(kuò)展的基本樣板。還有其他方法可供用于創(chuàng)建 BHO(例如,使用“Microsoft 基礎(chǔ)類”(MFC) 或 Win32 API 和 COM),但 ATL 是為我們自動處理許多細(xì)節(jié)的輕型庫,包括建立含有 BHO 類標(biāo)識符 (CLSID) 的注冊表。
ATL 的另一個優(yōu)勢在于它的 COM 感知智能指針類(例如,CComPtr 和 CComBSTR),這些類可管理 COM 對象的生命周期。例如,CComPtr 在賦值時會調(diào)用 AddRef,而在對象被銷毀或超出范圍時會調(diào)用 Release。智能指針簡化了代碼并且有助于避免內(nèi)存泄漏。當(dāng)在單個方法范圍內(nèi)使用時,它們的穩(wěn)定性和可靠性尤為有用。
本文的***部分向您逐步介紹了如何實(shí)現(xiàn)簡單的 BHO 并驗(yàn)證它是否由 Internet Explorer 加載。接下來的部分將說明如何將 BHO 連接到瀏覽器事件,***一部分將介紹與更改網(wǎng)頁外觀的 DHTML 文檔對象模型 (DOM) 的簡單交互。
概述
到底什么是Visual Studio 2005程序對象 (BHO)?簡言之,BHO 是將自定義功能添加到 Internet Explorer 的輕型 DLL 擴(kuò)展。BHO 還可以將功能添加到 Windows 資源管理器外殼程序(盡管這并不常見,也不是本文重點(diǎn))。#t#
BHO 通常并不提供其自身的任何用戶界面 (UI)。它們而是通過在后臺響應(yīng)瀏覽器事件和用戶輸入數(shù)據(jù)來發(fā)揮作用。例如,BHO 可以攔截彈出窗口、自動填充窗體或?yàn)槭髽?biāo)手勢添加支持。有一種常見誤解認(rèn)為工具欄擴(kuò)展項(xiàng)需要 BHO;但如果將 BHO 與工具欄配合使用,則可以實(shí)現(xiàn)更豐富的用戶體驗(yàn)。注意 BHO 對于最終用戶和開發(fā)人員同樣都是便捷的工具;但由于 BHO 被賦予了對瀏覽器和 Web 內(nèi)容的相當(dāng)大的控制能力,并且它們通常都處于未檢測的狀態(tài),因此用戶應(yīng)十分謹(jǐn)慎地從可靠來源獲取和安裝 BHO。
BHO 的生命周期與它所交互的瀏覽器實(shí)例的生命周期相等。在 Internet Explorer 6 和早期版本中,這意味著為每個新的頂層窗口都創(chuàng)建(和銷毀)一個新 BHO。另一方面,Internet Explorer 7 會為每個選項(xiàng)卡都創(chuàng)建和銷毀一個新 BHO。BHO 不是由承載 WebBrowser 控件的其他應(yīng)用程序加載,也不是由 HTML 對話框之類的窗口加載。
BHO 的主要要求是實(shí)現(xiàn) IObjectWithSite 接口。此接口提供了一個方法(即 SetSite),此方法方便了與 Internet Explorer 的初始通信,Visual Studio 2005程序并會在其將要釋放時通知 BHO。我們實(shí)現(xiàn)此接口,然后將 BHO 的 CLSID 添加到注冊表中,由此創(chuàng)建一個簡單的瀏覽器擴(kuò)展。