浏览器扩展开发入门:BHO实例教程

浏览器扩展或插件是增强浏览器功能的程序,它们可以用于检索信息、修改网页内容,或者提供额外的功能,如股票市场状态或天气信息。本文将介绍如何开发一个简单的IE浏览器扩展(BHO)。

对于初学者来说,开始学习BHO开发可能会感到有些沮丧,因为需要学习很多新知识。作为一个初学者,将分享经验,帮助其他初学者入门。

什么是BHO

BHO(Browser Helper Object)是一个COM对象,它为每个IE窗口加载。当浏览器窗口打开时,它会创建BHO的一个副本;当窗口关闭时,它会销毁BHO的副本。

要开发BHO,需要一个与浏览器交互的COM DLL。这需要在.NET项目中实现COM互操作库。

让创建一个名为'HelloBHOWorld'的BHO项目。首先,创建一个新的C#类库项目,并重命名Class1.cs为IObjectWithSite.cs。

接下来,需要实现IObjectWithSite接口,并添加GetSite和SetSite方法。这些方法用于获取和设置对象的站点。

在IObjectWithSite.cs文件中,需要指定IE的GUID,以便程序可以附加到IE。代码示例如下:

using System.Runtime.InteropServices; namespace HelloBHOWorld { [ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352")] public interface IObjectWithSite { [PreserveSig] int SetSite([MarshalAs(UnmanagedType.IUnknown)] object site); [PreserveSig] int GetSite(ref Guid guid, out IntPtr ppvSite); } }

完成IObjectWithSite.cs后,需要添加另一个类文件BHO.cs。在这个文件中,需要添加对SHDocVw.dll和MSHTML.dll的引用。

SHDocVw是Microsoft Shell Doc Object和Control Library,而MSHTML是访问动态HTML(DHTML)对象模型的接口。

在BHO.cs文件中,需要实现IObjectWithSite接口,并定义两个方法。还需要为程序分配一个GUID,并添加WebBrowser和HTMLDocument变量。

在BHO.cs文件中,需要编写两个函数来注册和注销DLL。

public static string BHO_KEY_NAME = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects"; [ComRegisterFunction] public static void RegisterBHO(Type type) { RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_KEY_NAME, true); if (registryKey == null) registryKey = Registry.LocalMachine.CreateSubKey(BHO_KEY_NAME); string guid = type.GUID.ToString("B"); RegistryKey ourKey = registryKey.OpenSubKey(guid); if (ourKey == null) ourKey = registryKey.CreateSubKey(guid); ourKey.SetValue("Alright", 1); registryKey.Close(); ourKey.Close(); } [ComUnregisterFunction] public static void UnregisterBHO(Type type) { RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_KEY_NAME, true); string guid = type.GUID.ToString("B"); if (registryKey != null) registryKey.DeleteSubKey(guid, false); }

接下来,需要实现OnBeforeNavigate方法,该方法在浏览器导航之前调用。将使用这个方法来获取浏览器中的信息。

public void OnBeforeNavigate2(object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel) { document = (HTMLDocument)webBrowser.Document; System.Windows.Forms.MessageBox.Show("URL to redirect: " + URL.ToString()); foreach (IHTMLInputElement tempElement in document.getElementsByTagName("INPUT")) { System.Windows.Forms.MessageBox.Show(tempElement.name + " = " + tempElement.value); } }

注册和注销BHO:

要注册/注销BHO,使用RegAsm.exe,并编写bat文件registercom.bat和unregisterall.bat:

REM register for com so we can test the register/unregister functions while debugging regasm.exe /codebase "HelloBHOWorld.dll" pause REM unregister HelloBHOWorld.dll for COM regasm.exe /unregister "HelloBHOWorld.dll" pause

运行registercom.bat文件,然后打开IE浏览器,转到“工具”>“管理加载项…”,应该能看到BHO在列表中。

现在浏览任何网站(如google.com),在输入框中输入文本并点击按钮。应该能看到弹出的信息。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485