使用 XP-COM 组件的简单 Firefox 插件
利用 XP-COM 的强大功能开始制作 Firefox 插件
引言
Firefox 是一个不错的浏览器,但通过其扩展,它变得真正酷炫和强大。我最喜欢的扩展是 Adblock Plus 和 No Script。正因如此,并且因为我从未找到这样一个“完整”的示例,我想提供一个简单的 Firefox 扩展示例。本文的主要重点是将 XP-COM 组件集成到 Firefox 扩展中。
XP-COM 代表“跨平台组件对象模型”,它不是 Microsoft 的 COM,后者仅适用于 Windows,但 XP-COM 也适用于 Linux 和 MAC-OS。有关更多信息,请参阅此处。
为了创建基本的扩展,我使用了 Ted Mielzarek 提供的不错的向导。可以在此处找到它。
背景
最近,我参加了一个Mozilla 扩展研讨会,并对编写带有 XP-COM 的 Firefox 扩展的问题感到好奇。我记起这是如何完成的,现在我想分享我的知识和经验。这并非一项简单的任务,因此可能会遇到一些问题。也许你需要深入研究才能使其正常工作。
Using the Code
我包含 2 个 zip 文件,第一个是 XP-COM DLL 的代码,第二个是带有此 DLL 和一些其他内容的扩展。正确的使用方法是下载的“zip”文件重命名为“xpi”,以便 Firefox 可以将其安装为扩展。然后,你会在 Firefox 的“工具”中找到一个按钮和 2 个菜单项。它们显示了 DLL 实现的接口以及 Explorer 的调用显示了一个系统调用。
要使用该代码,你需要安装Gecko-SDK 到你的机器上。
为了创建 XP-COM 代码,我使用了非常强大且节省时间和精力的向导。它只能与 Visual Studio 2005 的英文版本一起使用。
值得讨论的代码在 JavaScript 中
//Getting the class factory for the class
var compClass = Components.classes[ "@codeproject.com/CodeprojectXPCOM;1" ];
//Creating an object with the GUID
var instance = compClass.createInstance();
//asking for that interface
var XpCom = instance.QueryInterface(Components.interfaces.ICodeprojectXPCOM);
//my Call of the object
XpCom.Action(1,"C:\\Program Files");
关注点
编写扩展确实很麻烦。与 Internet Explorer 相比,它看起来稍微容易一些。Internet Explorer 的文档记录较差,而且文档来自“过时”的 Internet Explorer 6。
我学到了很多关于 XP-COM 的知识。这就像重温“DLL 地狱”。如果你创建带有依赖项的 DLL,它通常无法工作,因为 firefox.exe 在其文件夹中运行,看不到其他 DLL。因此,我强烈建议“静态链接”并使用依赖项 Walker。
其他有趣且经常参考的资源是
历史
- 2009 年 3 月 31 日 初始发布
- 2010 年 7 月 2 日 XPI 文件现在与较新的 Firefox 版本兼容