1.首先安裝GECKO SDK開發包,並解壓到本地目錄 例如:/home/user/sdk/gecko-sdk/
2.為主介面類建立GUID uuidgen
2.編寫介面檔案***.idl
3.分別產生***.h和***.xpt檔案(xpidl -m header/typelib -w -o /輸出路徑/輸出檔案名 -I /Gecko/IDL所在路徑 將要編譯的***.idl檔案)
4.修改產生的組件的標頭檔***.h,在開始加入宏保護代碼(#ifndef _MY_MYCOMPONENT_H_...),產生一個組件用的GUID,添加下面的行到標頭檔中
首先是Contract ID,然後是類名,GUID
#define MY_COMPONENT_CONTRACTID "@mydomain.com/XPCOMSample/MyComponent;1"
#define MY_COMPONENT_CLASSNAME "A Simple XPCOM Sample"
#define MY_COMPONENT_CID GUID
5.建立你的組件的標頭檔****.h,把***.h檔案中以/*Header file */開始的那段代碼拷貝到此標頭檔中,替換其中的_MYCLASS_為你的類名
6.建立你的組件的實現檔案****.cpp,添加標頭檔引用
#include "****.h"
把***.h檔案中以/*Implementation file */開始的那段代碼拷貝到此標頭檔中,替換其中的_MYCLASS_為你的類名,添加實現代碼
6.建立你的組件定義檔案****Module.cpp,添加標頭檔引用
#include "nsIGenericFactory.h" //Mozilla GenericFactory definitions
#include "****.h"
添加NS_GENERIC_FACTORY_CONSTRUCTOR(MyComponent)來定義你的組件的構造器
為你的組件添加類名,contract ID, GUID定義
static nsModuleComponentInfo components[] =
{
{
MY_COMPONENT_CLASSNAME,
MY_COMPONENT_CID,
MY_COMPONENT_CONTRACTID,
MyComponentConstructor,
}
};
添加NS_IMPL_NSGETMODULE("****Module",components)用於向Mozilla輸出以上定義資訊
7.建立makefile,產生****.so
(Embed:/home/embed/microb-engine/microb-engine/build-tree/mozilla/build/autoconf/make-makefile extentions
目錄名
會在此目錄下產生Makefile檔案)
/*embed下不用8,9*/
8.在Mozilla上註冊此組件
拷貝****.so和前面產生的***.xpt到Mozilla的components目錄下(~/firefox/components, ~/Mozilla/components)
運行regxpcom命令,註冊組件(可能需要提供組件所在的路徑)
從Mozilla路徑下刪除xpti.dat和compreg.dat(這兩個檔案會在Mozilla下次重啟時自動產生)
也可以touch Mozilla/FireFox安裝目錄下一個名為.autoreg的檔案
9.測試組件
重新啟動Mozilla或是FireFox
開啟測試頁面****Test.html,點擊"GO"按鈕,就能看到預期的結果了