@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.

制作Windows下的Portable Firefox

Posted by zeal on 2009-07-10 18:09 , 6414 characters |  + 0 - 0   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/626 MaDe1nZEAL
标签 ( 网络 ):  , 

虽然 PortableApps 提供的 Firefox 便携版已经很好用,不过有些时候还是会需要按自己的特殊需求制作更为个性化的绿色版本。比如把某个富客户端的内部系统用Firefox包装成一个压缩包让那些只知道马桶套套的用户解压使用就会比说服他们安装Firefox浏览器并做各种配置来得有效,同时可以得到比IE快N次方倍的访问效果。

当然其实 Firefox 本身的运行机制就已经相当绿色了。通过 -profile "<path>" 参数可以指定Firefox启动使用的个人配置文件目录,通过 -no-remote 参数可以允许同时运行多个Firefox进程实例;[1] 启动时使用这两个参数就已经能够保证 Firefox 不与系统其他程序发生冲突。

所以Portable第一步,把整个 Firefox 安装目录复制一份,然后把自己现有的profile目录(缺省情况下Firefox Profile 在 Documents and Settings\[当前登录用户名]\Application Data\Mozilla\Firefox\Profiles\随机目录名 中)覆盖到 defaults\profile  子目录。然后在主目录建一个简单的批处理文件:

firefox -no-remote -profile defaults\profile

运行该批处理即可启动。如果嫌批处理的命令行窗口难看的话,可以考虑安装一个 AutoHotKey ,利用该程序附带的 ahk2exe 工具编写启动脚本并编译成可执行的EXE文件。ahk 脚本文件的语法很简单,参考官方的help文档即可。个人比较喜欢把整个复制出来的Firefox目录作为子目录并设置成隐藏属性,然后在主目录下就只剩下一个由 ahk2exe 编译出来的引导程序,看上去会比较干净。ahk脚本如下:

Run, %A_ScriptDir%\Firefox\firefox -no-remote -profile defaults\profile, %A_ScriptDir%\Firefox\, Max
ExitApp

然后用 ahk2exe 指定源 ahk 和 目标 exe (同时还可以给你的目标 exe 配一个个性化的图标文件),进行转换即可。

当然直接拷出来的Firefox和profile目录会有很多并不一定需要的文件内容。

其中必须删除的文件:
defaults\profile 目录下 ->
    compatibility.ini
    extensions.cache
    extensions.ini
    pluginreg.dat
    XPC.mfl
    xpti.dat
    XUL.mfl

这些文件在firefox运行的时候会自动根据当前目录进行生成。如果不删除的话当打包到其他电脑之后解压缩到与之前不一样的目录的话就会出现扩展、插件无法正常加载等异常。

可以选择性删除的:
主目录下的 ->
目录
    searchplugins  搜索引擎插件,如果不想显示搜索工具栏的话这个目录就不需要
    uninstall  卸载目录,都绿色了也就不需要它了
    updates 更新目录,做成绿色了一般要把自动更新关闭,这个目录也不需要
文件
    browserconfig.properties
    install.log
    LICENSE
    old-homepage-default.properties
    update.locale
    updater.exe
    updater.ini
defaults\profile 子目录下的 ->
    bookmarks.html
    compreg.dat
    content-prefs.sqlite
    cookies.sqlite
    cookies.sqlite-journal
    downloads.sqlite
    formhistory.sqlite
    places.sqlite
    places.sqlite-journal
    search.json
    search.sqlite
    signons.sqlite
    urlclassifier3.sqlite
    目录
        bookmarkbackups
        Cache 缓存目录,完全可以删掉,不然文件会比较大
        minidumps

这些文件基本上是个人访问相关的历史数据,如果不需要的话都可以删除(尤其当有些历史数据会非常大的时候)。当要生成一个不保存访问隐私数据的便携版时那些 .sqlite 之类的都能删掉,如果是给自己用的话根据需要来选择保留那些历史数据。

同样,可以把这些删除多余内容的操作也写成 ahk 脚本来自动执行,这样每次重新发布新版本的时候清理起来就比较方便。比如:

FileDelete, %A_ScriptDir%\defaults\profile\compatibility.ini
FileDelete, %A_ScriptDir%\defaults\profile\extensions.cache
FileDelete, %A_ScriptDir%\defaults\profile\extensions.ini
FileDelete, %A_ScriptDir%\defaults\profile\pluginreg.dat
FileDelete, %A_ScriptDir%\defaults\profile\XPC.mfl
FileDelete, %A_ScriptDir%\defaults\profile\xpti.dat
FileDelete, %A_ScriptDir%\defaults\profile\XUL.mfl

FileDelete, %A_ScriptDir%\defaults\profile\compreg.dat

FileDelete, %A_ScriptDir%\defaults\profile\downloads.sqlite
FileDelete, %A_ScriptDir%\defaults\profile\places.sqlite
FileDelete, %A_ScriptDir%\defaults\profile\places.sqlite-journal
FileDelete, %A_ScriptDir%\defaults\profile\search.json
FileDelete, %A_ScriptDir%\defaults\profile\search.sqlite
FileDelete, %A_ScriptDir%\defaults\profile\urlclassifier3.sqlite

FileDelete, %A_ScriptDir%\defaults\profile\bookmarks.html
FileDelete, %A_ScriptDir%\defaults\profile\content-prefs.sqlite
FileDelete, %A_ScriptDir%\defaults\profile\cookies.sqlite
FileDelete, %A_ScriptDir%\defaults\profile\cookies.sqlite-journal
FileDelete, %A_ScriptDir%\defaults\profile\signons.sqlite
FileDelete, %A_ScriptDir%\defaults\profile\formhistory.sqlite

FileRemoveDir, %A_ScriptDir%\defaults\profile\bookmarkbackups, 1
FileRemoveDir, %A_ScriptDir%\defaults\profile\Cache, 1
FileRemoveDir, %A_ScriptDir%\defaults\profile\minidumps, 1

FileDelete, %A_ScriptDir%\browserconfig.properties
FileDelete, %A_ScriptDir%\install.log
FileDelete, %A_ScriptDir%\LICENSE
FileDelete, %A_ScriptDir%\old-homepage-default.properties
FileDelete, %A_ScriptDir%\update.locale
FileDelete, %A_ScriptDir%\updater.exe
FileDelete, %A_ScriptDir%\updater.ini

FileRemoveDir, %A_ScriptDir%\searchplugins, 1
FileRemoveDir, %A_ScriptDir%\uninstall, 1
FileRemoveDir, %A_ScriptDir%\updates, 1

MsgBox, Firefox Directory Cleaning Finished

ExitApp

另一个需要注意的是 Firefox 对于在系统注册表里面注册的插件的处理。比如像 Java Quick Starter, Google Update, Microsoft .NET Framework Assistant 这些玩意,虽然你期望的是真正的绿色版,但在启动之后 Firefox 会自动搜索windows系统注册表把注册的插件给装上。大多数情况下除了 Flash, Media Player 有限几个插件之外,其他乱七八糟的插件都不应该启用。

要让 Firefox 在启动后自动禁用某些流氓插件,就需要用到主目录下的 blocklist.xml [2] 文件。在其中的  <emItems> 标签中加上 <emItem id="jqs@sun.com"/> 禁用 Java Quick Starter ,在 <pluginItems> 标签下加上

  <pluginItem>
    <match name="name" exp="^Picasa"/>
  </pluginItem>
  <pluginItem>
    <match name="name" exp="^Java"/>
  </pluginItem>
  <pluginItem>
    <match name="description" exp="^DRM "/>
  </pluginItem>
  <pluginItem>
    <match name="name" exp="^Google"/>
  </pluginItem>

来禁用其他插件。具体根据实际情况使用不同的正则表达式来匹配需要禁用的内容。修改好之后你还需要给 defaults/profile/prefs.js 文件增加几个配置项:

user_pref("extensions.blocklist.enabled", true);
user_pref("extensions.blocklist.interval", 8640000);
user_pref("extensions.blocklist.url", "");
 

以激活 blocklist 机制同时把 block url 设为空(否则 Firefox 会根据 interval 的时间间隔定时从服务器上抓取最新的 blocklist.xml 覆盖到本地文件)。最好把 blocklist.xml 设为只读属性,免得被重写。

最后一点, Firefox 3.5 仍然没有设置 urlclassifier.updatecachemax 参数,所以该cache文件变成巨无霸导致 Firefox 极端不稳定的可能性依然存在(未经验证),最好再给 prefs.js 加上:

user_pref("urlclassifier.updatecachemax", 20971520);

防止 Firefox CPU 占用 100% 的问题出现。

附:

修改Firefox的默认图标 -> 在 chrome\icons\default 目录下放置你喜欢的图标文件覆盖(目录不存在的话直接新建即可),其中 main-window.ico 这个图标是显示在标题栏左边,以及状态栏中的,其他的应该是打开帮助,扩展等等子窗口上的图标
修改Firefob标题栏后缀 -> 安装 Titlebar Tweaks 扩展

[1] Firefox 启动的命令行参数参考 (Command line arguments)
[2] blocklist.xml语法

Last Modified on 2009-08-21 15:16
7 条评论:
- 悉尼 () (link) 于 2009-07-10 20:26
好有diy精神啊~居然手动firefox~~~
- ZhuZhe2009-07-11 00:04
http://portableapps.com/apps/internet/fi..
有个网站叫这个来的。。。。
- 爱玩游戏 () (link) 于 2009-07-11 22:49
学习
- cbm () (link) 于 2009-07-11 22:49
profile 的路径貌似不能用相对路径。很困扰啊。
- zeal (link) verified2009-07-12 13:01
可以用相对路径。但你需要把当前工作路径指到Firefox主目录。像我在 ahk 脚本里面用
Run, %A_ScriptDir%Firefoxfirefox -no-remote -profile defaultsprofile, %A_ScriptDir%Firefox, Max
第二个参数就是指定工作目录。
- 百度玩吧 () (link) 于 2009-07-14 11:13
- 品味生活 () (link) 于 2009-07-16 10:35
虽然看不太懂,但还是支持下。
日志存档
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
本 Blog 原创内容
遵循以下授权:

Creative Commons
(创作共用) CC

署名-非商业性
-相同方式分享
ZEAL Blog 基于
Powered byPivot - 1.24.1: 'Arcee'
Pivot1.24.1
开发
系统部署于
Linode.com
Launched @
2005-04-27
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号