對firefox和內嵌Gecko程序的插件(plugins)的註冊搜索方式的一點認識

昨日在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插件都實現了導出這3個函數.

 

(2)若插件註冊表項刪除, pluginreg.dat文件刪除,plugins下有DLL,則仍可顯示正確MIME類型,描述等信息.推測是firefox等程序在初始化時維護的有一個數據庫,裏頭根據DLL屬性描述裏的”原文件名”存儲有一一對應的有這些信息.

在windows xp下查看這些DLL的屬性,發現有MIMEType,FileOpenName,FileExtents與下面在about:plugins裏看到的MIME類型,描述,後綴三項一一對應,應該就是直接從插件DLL的屬性裏讀取的。

 

 

一點粗淺認識,純屬自行測試後的一些推論,如有謬誤盡請指正.

Blog: http://blog.csdn.net/mzlogin

Email: mzlogin (at) qq.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章