Mozilla自帶的Profile支持實際上是非常給力的,看看%appdata%/Mozilla/Firefox下的文件就能知道,這裏存放着許多的信息,它們提供了很多東西,例如:
1.可以通過Profiles/…default/chrome下的userchrome.css文件來定製自己的firefox外觀,比如用#appmenu-button { display:none !important;}這樣一句就可以去掉firefox左上角難看的按鈕菜單
2.安裝的extensions,Addon放在這裏
3.證書相關、組件列表、cookie、插件列表等等都可以在這裏找到
等等等等
合理利用這些文件和信息我們可以在自己內嵌Gecko的程序裏方便地做一些事情而不用自己去操作和維護一些配置項和數據。
在自己編譯完xulrunner-1.9.2後尚能找到編譯好的profdirserviceprovidersa_s.lib來用於WinEmbed工程的移植,最近編譯了xulrunner-10.0.2後發現就沒這麼幸運了,沒有生成這個東東。在頭疼了一番後決定自己做一個工程來生成它。根據xulrunner源碼mozilla-release/profile/dirserviceprovider下的幾個makefile來做就可以了。
直接講過程吧。
一、編譯出需要的Lib文件
新建一個Win32靜態Lib空工程,將mozilla-release/profile/dirserviceprovider目錄下的幾個.h和.cpp文件都添加進工程,將path/to/xulrunner-10.0.2-sdk/include添加到工程的附加包含目錄,爲工程添加預處理器定義XP_WIN和XPCOM_GLUE這兩項。如果一切順利的話這時候你已經可以順利地編譯出這個lib文件了。在http://download.csdn.net/detail/mzlogin/4382847可以下載到我的Demo工程,如果想編譯,需要將上面所講的path/to/xulrunner-10.0.2-sdk/include修改成你本機上xulrunner sdk的相應路徑。
二、將Lib鏈接進自己內嵌Gecko的程序
自寫一個啓用profile的函數,我這裏直接使用WinEmbed例子裏提供的StartupProfile函數:
nsresult StartupProfile()
{
nsCOMPtr<nsIFile> appDataDir;
nsresult rv = NS_GetSpecialDirectory(NS_APP_APPLICATION_REGISTRY_DIR, getter_AddRefs(appDataDir));
if (NS_FAILED(rv))
return rv;
appDataDir->AppendNative(nsCString("MozillaDemo"));
nsCOMPtr<nsILocalFile> localAppDataDir(do_QueryInterface(appDataDir));
nsCOMPtr<nsProfileDirServiceProvider> locProvider;
NS_NewProfileDirServiceProvider(PR_TRUE, getter_AddRefs(locProvider));
if (!locProvider)
return NS_ERROR_FAILURE;
rv = locProvider->Register();
if (NS_FAILED(rv))
return rv;
return locProvider->SetProfileDir(localAppDataDir);
}
其中的”MozillaDemo”即是你的profile文件夾的名字,可以根據你的喜好改動,在這裏會是%appdata%/Mozilla/MozillaDemo
在初始化Gecko運行環境的過程裏調用完XRE_InitEmbedding2之後,添加
if (NS_FAILED(StartupProfile())) {
result = 8;
}
else {
在此文件開始添加
#include "nsAppDirectoryServiceDefs.h"
#include "nsDirectoryServiceDefs.h"
#include "nsProfileDirServiceProvider.h"
在合適的地方添加
#pragma comment(lib, “編譯出的lib”)
順利的話,就大功告成了,運行一個你的內嵌Gecko程序然後去%appdata%/Mozilla/MozillaDemo看看吧~有圖有真相哦。
Blog: http://blog.csdn.net/mzlogin
Email: mzlogin(at) qq.com