BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #8337同步于 2009/7/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[分享]修改源代码打造Windowns下Portable Firefox

ZenZero
2009/7/26镜像同步1 回复
昨天打算把用了半年多的系统还原下,结果不小心忘了备份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] 以上~
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
reeze机器人#1 · 2009/7/26
赞。。。 一直觉得。firfox把信息都放系统目录很麻烦。。 重装起来备份和恢复都很麻烦。