Visual Studio 2005程序包括许多新的和改进的用于提高工作效率的功能。Visual Studio 2005程序还进行了重新设计,从而向开发人员提供对.NET Framework 组件的直接访问,因此可以在使用的过程当中感受到趣味性和吸引力。
创建一个简单的“浏览器帮助程序对象”(BHO),即实现 IObjectWithSite 接口并将其自身附加到 Internet Explorer 的一种“组件对象模型”(COM) 对象。本文逐步说明了如何创建入门级 BHO。首先,BHO 会在 Internet Explorer 加载文档时显示消息“大家好!”。然后,BHO 被扩展为从已加载页面删除图像。本文面向的是想要了解如何扩展浏览器功能以及如何为 Internet Explorer 创建 Web 开发人员工具的开发人员(本文还包含指向英文网页的链接)。
简介
本文凭借 Visual Studio 2005程序和“活动模板库”(ATL) 来开发使用 C++ 的 BHO。我们之所以决定使用 ATL,是因为它方便地实现了我们可以按需进行扩展的基本样板。还有其他方法可供用于创建 BHO(例如,使用“Microsoft 基础类”(MFC) 或 Win32 API 和 COM),但 ATL 是为我们自动处理许多细节的轻型库,包括建立含有 BHO 类标识符 (CLSID) 的注册表。
ATL 的另一个优势在于它的 COM 感知智能指针类(例如,CComPtr 和 CComBSTR),这些类可管理 COM 对象的生命周期。例如,CComPtr 在赋值时会调用 AddRef,而在对象被销毁或超出范围时会调用 Release。智能指针简化了代码并且有助于避免内存泄漏。当在单个方法范围内使用时,它们的稳定性和可靠性尤为有用。
本文的***部分向您逐步介绍了如何实现简单的 BHO 并验证它是否由 Internet Explorer 加载。接下来的部分将说明如何将 BHO 连接到浏览器事件,***一部分将介绍与更改网页外观的 DHTML 文档对象模型 (DOM) 的简单交互。
概述
到底什么是Visual Studio 2005程序对象 (BHO)?简言之,BHO 是将自定义功能添加到 Internet Explorer 的轻型 DLL 扩展。BHO 还可以将功能添加到 Windows 资源管理器外壳程序(尽管这并不常见,也不是本文重点)。#t#
BHO 通常并不提供其自身的任何用户界面 (UI)。它们而是通过在后台响应浏览器事件和用户输入数据来发挥作用。例如,BHO 可以拦截弹出窗口、自动填充窗体或为鼠标手势添加支持。有一种常见误解认为工具栏扩展项需要 BHO;但如果将 BHO 与工具栏配合使用,则可以实现更丰富的用户体验。注意 BHO 对于最终用户和开发人员同样都是便捷的工具;但由于 BHO 被赋予了对浏览器和 Web 内容的相当大的控制能力,并且它们通常都处于未检测的状态,因此用户应十分谨慎地从可靠来源获取和安装 BHO。
BHO 的生命周期与它所交互的浏览器实例的生命周期相等。在 Internet Explorer 6 和早期版本中,这意味着为每个新的顶层窗口都创建(和销毁)一个新 BHO。另一方面,Internet Explorer 7 会为每个选项卡都创建和销毁一个新 BHO。BHO 不是由承载 WebBrowser 控件的其他应用程序加载,也不是由 HTML 对话框之类的窗口加载。
BHO 的主要要求是实现 IObjectWithSite 接口。此接口提供了一个方法(即 SetSite),此方法方便了与 Internet Explorer 的初始通信,Visual Studio 2005程序并会在其将要释放时通知 BHO。我们实现此接口,然后将 BHO 的 CLSID 添加到注册表中,由此创建一个简单的浏览器扩展。