昨日在 jumufeng 同学建立的 firefox 交流群 (81424441) 中,与群友们讨论了有关插件的一些事项。我在本地进行了测试,并总结了一些初步的见解,现分享如下:(欢迎对 mozilla 相关开发有兴趣或正在进行开发的朋友加入群组交流)
通常,对于 firefox 和其他嵌入 Gecko 内核的应用程序而言,其插件的注册和搜索机制在 Windows 下应与以下内容相关:
(1) 程序会首先检查可执行文件同级的 plugins 目录下的 DLL 等文件,判断文件名是否符合插件特征,并通过某种机制确认其是否为插件。命名规则:例如,flash 插件的 DLL 名为 NPSWF32.DLL,改为 asdfjljlk.dll 则无法识别,而 NPSWF311112.dll 或 NPSWFjkljdlfkj32.dll 可以被识别,N1PSWF32.dll 则无法识别。
(2) 注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins 下注册了插件信息。
根据注册表项的 path 键值去搜索对应的 DLL,如果找不到,则在 firefox 的“附加组件”或 about:plugins 中不会显示,即使该 DLL 位于系统环境变量的 path 包含的路径下。((1) 中提到的 plugins 目录的情况除外)
(3) 在 %appdata%\Mozilla\Firefox\Profiles\wgnbwzjm.default 文件夹中的 pluginreg.dat 文件中包含具体配置项,插件是否启用和其他插件相关信息将从这里读取,并在“附加组件”和 about:plugins 中显示给用户。
光标处的 4 表示不启用,若为 1 或 5 则表示启用。若为 13,则表示找不到。删除此文件后再次运行 firefox 时会自动重新生成(根据 plugins 和注册表)。此设置对安装的 firefox 等在应用程序中启用 profile 的程序有效(我自己编写的嵌入 Gecko 的程序因为没有启用 profile,所以没有此文件,只能根据 plugins 和注册表来查找和显示插件)。剪切走此文件,则在 firefox 中已经禁用的插件也会被启用。
Plugins 文件夹的优先级更高。如果在 plugins 和注册表指示的路径下都能找到某插件 DLL,那么 pluginreg.dat 文件中的路径将被修改为 plugins 文件夹下的 DLL 路径。
其他相关小知识点:
(1) DLL 插件都实现了导出这三个函数。
(2) 如果删除插件注册表项和 pluginreg.dat 文件,但在 plugins 下有 DLL,仍可显示正确的 MIME 类型、描述等信息。推测 firefox 等程序在初始化时维护了一个数据库,根据 DLL 属性描述中的“原文件名”存储了这些信息的对应关系。
在 Windows XP 下查看这些 DLL 的属性,发现有 MIMEType、FileOpenName、FileExtents 与 about:plugins 中看到的 MIME 类型、描述、后缀三项一一对应,应该是从插件 DLL 的属性中直接读取的。

这些是我的初步认识,纯属个人测试后的推论,如有错误,欢迎指正。
以上就是Firefox 和内嵌 Gecko 程序的 Plugins的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号