返回信息流昨天打算把用了半年多的系统还原下,结果不小心忘了备份FF的配置文件夹,痛定思痛,用了一晚上的时间研究FF代码结构,成功改出了一个移动版Firefox...
网上也有其它版本的Portable Firefox,但本人没有用过,哪个更适合自己的需求请自己把握
思路:
修改Firefox代码中获取AppData和LocalAppData文件夹的函数并作如下映射:
AppData -> 安装文件夹
LocalAppData -> 系统临时文件夹
Profile目录 -> AppData\Profile
Extensions -> AppData\Extensions
需要修改的代码如下(以下所有代码来自源码树下toolkit\xre\nsXREDirProvider.cpp文件):
[QUOTE]
/********************************************************************
* Original
********************************************************************
nsString path;
if (aLocal)
rv = GetShellFolderPath(CSIDL_LOCAL_APPDATA, path);
if (!aLocal || NS_FAILED(rv))
rv = GetShellFolderPath(CSIDL_APPDATA, path);
NS_ENSURE_SUCCESS(rv, rv);
rv = NS_NewLocalFile(path, PR_TRUE, getter_AddRefs(localDir));
*********************************************************************
* Modifiled By ZenZero
* 2009/07/26
*
* APPDir -> RootDir
* LocalAppDir -> TempDir
*********************************************************************/
nsString path;
PRUnichar* buf;
PRUint32 bufLength = path.GetMutableData(&buf, MAXPATHLEN);
NS_ENSURE_TRUE(bufLength >= MAXPATHLEN, NS_ERROR_OUT_OF_MEMORY);
if (aLocal)
{
bufLength = GetTempPathW(MAXPATHLEN, buf);
if (bufLength >= 0)
{
path.SetLength(bufLength);
rv = NS_NewLocalFile(path, PR_TRUE, getter_AddRefs(localDir));
NS_ENSURE_SUCCESS(rv, rv);
}
else
{
path.SetLength(0);
return NS_ERROR_FAILURE;
}
}
else
{
bufLength = GetModuleFileNameW( NULL, buf, MAXPATHLEN);
if (bufLength >= 0)
{
PRUnichar *pSlash;
pSlash = wcsrchr(buf, L'\\');
if(pSlash)
{
*pSlash = L'\0';
path.SetLength(wcslen(buf));
rv = NS_NewLocalFile(path, PR_TRUE, getter_AddRefs(localDir));
NS_ENSURE_SUCCESS(rv, rv);
}
else
{
path.SetLength(0);
return NS_ERROR_FAILURE;
}
}
else
{
path.SetLength(0);
return NS_ERROR_FAILURE;
}
}
[/QUOTE]
[QUOTE]
/********************************************************************
* Original
********************************************************************
static const char* const sXR = "Mozilla";
rv = aFile->AppendNative(nsDependentCString(sXR));
NS_ENSURE_SUCCESS(rv, rv);
static const char* const sExtensions = "Extensions";
rv = aFile->AppendNative(nsDependentCString(sExtensions));
NS_ENSURE_SUCCESS(rv, rv);
*********************************************************************
* Modifiled By ZenZero
* 2009/07/26
*
* Mozilla/Extensions -> AppData/Extensions
********************************************************************/
static const char* const sXR = "AppData";
rv = aFile->AppendNative(nsDependentCString(sXR));
NS_ENSURE_SUCCESS(rv, rv);
static const char* const sExtensions = "Extensions";
rv = aFile->AppendNative(nsDependentCString(sExtensions));
NS_ENSURE_SUCCESS(rv, rv);
[/QUOTE]
[QUOTE]
/********************************************************************
* Original
********************************************************************
if (gAppData->profile) {
rv = AppendProfileString(aFile, gAppData->profile);
}
else {
if (gAppData->vendor) {
rv = aFile->AppendNative(nsDependentCString(gAppData->vendor));
NS_ENSURE_SUCCESS(rv, rv);
}
rv = aFile->AppendNative(nsDependentCString(gAppData->name));
}
NS_ENSURE_SUCCESS(rv, rv);
*********************************************************************
* Modifiled By ZenZero
* 2009/07/26
*
* vendor/name -> AppData
********************************************************************/
if (gAppData->profile)
rv = AppendProfileString(aFile, gAppData->profile);
else
rv = aFile->AppendNative(nsDependentCString("AppData"));
NS_ENSURE_SUCCESS(rv, rv);
[/QUOTE]
修改后重新编译即可,编译方法请自行参考官网说明:
https://developer.mozilla.org/en/Build_Documentation
这是修改后的文件和我编译用的mozconfig文件:
附件(9.2KB) firefox-portable.7z
如果不在乎版权问题又是自己用的话,可以在mozconfig文件中添加以下行来启用Firefox标识:
[QUOTE]
ac_add_options --enable-official-branding
[/QUOTE]
以上~
这是一条镜像帖。来源:北邮人论坛 / www-technology / #8337同步于 2009/7/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
[分享]修改源代码打造Windowns下Portable Firefox
ZenZero
2009/7/26镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复