ChmFox - CHM 文件阅读Firefox插件
fmms 13年前
ChmFox 是一款 Firefox 扩展。它可以将 Firefox 变成阅读 CHM 文件的利器。如果和 Firefox 上众多提升阅读体验的扩展配合使用,你就拥有了最好的 CHM 阅读软件,没有之一。更棒的是,它和 Firefox 一样是跨平台的,你会在 Windows,Linux,Mac 等众多平台上获得统一的 CHM 阅读体验。 <br /> <img title="ChmFox - CHM 文件阅读Firefox插件" border="0" alt="ChmFox - CHM 文件阅读Firefox插件" src="https://simg.open-open.com/show/db23760a91ab790138a961e2ce60b5b3.jpg" width="600" height="420" /> <br /> <div id="table-of-contents"> <div id="text-table-of-contents"> <ul> <li><a href="/misc/goto?guid=4958185434755557885">1 安装 </a></li> <li><a href="/misc/goto?guid=4958185435506514514">2 使用 </a></li> <li><a href="/misc/goto?guid=4958185436243625852">3 高级使用 </a></li> <li><a href="/misc/goto?guid=4958185436992099519">4 编译方法 </a></li> <li><a href="/misc/goto?guid=4958185437728760178">5 内幕 </a></li> <li><a href="/misc/goto?guid=4958185438470733856">6 未来 </a></li> </ul> </div> </div> <div id="outline-container-1" class="outline-3"> <h3 id="sec-1">1 安装 </h3> <div id="text-1"> <p>ChmFox 从 1.1 版开始就通过了 Mozilla 的官方认证,现在你可以直接在 Firefox 的菜单 附加组件->获取附加组件 中搜索并安装它。当然,你也可以去 ChmFox 在 Mozilla 官网上的<a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://addons.mozilla.org']);" href="/misc/goto?guid=4958185439215481920">主页</a> 去下载安装。安装完后需要重启 Firefox 才能生效。安装过程中会提醒给作者捐款以支持开发,如果很有爱的话可以尽些心意。当然,不捐款是完全不影响使用的。<br /> 目前 ChmFox 1.1 支持以下操作系统: </p> <ul> <li>Windows </li> <li>Linux x86_64 </li> <li>Linux i686 </li> <li>Mac i386<p></p> </li> </ul> <p>如果 ChmFox 暂时不支持你的操作系统,你又比较 geek 的话,请看后面的编译章节自行编译。 </p> </div> </div> <div id="outline-container-2" class="outline-3"> <h3 id="sec-2">2 使用 </h3> <div id="text-2"> <p>在重启完 Firefox 后,就可以开始使用 ChmFox 了。它的使用很直觉。你可以使用下面众多方式打开 CHM 文件: </p> <ul> <li>使用菜单中的 打开文件 选择要打开的 CHM 文件 </li> <li>用鼠标将 CHM 文件拖入 Firefox 窗口中 </li> <li>使用命令行直接打开,例如: firefox.exe c:\hello.chm<p></p> </li> </ul> <p>最后一种方式也是操作系统所熟知的打开方式。这意谓着,你可以直接将 CHM 文件类型关联到 Firefox 上。以后直接双击 CHM 文件,操作系统就会用 Firefox 去打开它。 </p> <p>一般 CHM 文件都会有目录,有些还会有索引。ChmFox 提供了专门的侧栏来显示它们。你可以通过菜单 查看 -> 侧栏 -> ChmFox 来打开和关闭。方便起见,ChmFox 同时提供了打开侧栏的快捷键 Ctrl+M。侧栏的使用也很直观,直接点击侧栏上的某个条目就可以转到相关页面。 </p> <p>在阅读时,你也可以将页面直接加入收藏夹。下次可以直接通过收藏夹中收藏的链接打开相应的文件的页面。<br /> ChmFox 对 CHM 使用了自定义的 URI schema, 形如: </p> <pre class="example">chm:///c:/path/to/file.chm!/page_url.html</pre> <p>在命令行中,也可以使用 Firefox 直接打开这种 CHM 的 URI: </p> <pre class="example">firefox.exe chm:///c:/hello.chm!/home.html</pre> <p>如果觉得字的大小不合适,还可以使用 Firefox 自身提供的页面缩放功能进行调整。 </p> </div> </div> <div id="outline-container-3" class="outline-3"> <h3 id="sec-3">3 高级使用 </h3> <div id="text-3"> <p>ChmFox 可以和众多优秀的 Firefox 扩展配合使用,大大提升 CHM 阅读体验。例如: </p> <ul> <li>使用 Firefox 的 NoSquint 扩展,自动调整页面和文字大小 </li> <li>使用 Delicious Extension 将阅读页面收藏到 Delicious 上,这样就可以在不同机器间同步阅读进度。不过,这要求不同机器上的 CHM 文件路径要相同。 </li> <li>使用 ScrapBook 对关键页面加入评注并收藏,做成读书笔记 </li> <li>…<p></p> </li> </ul> <p>这个列表还能继续下去。大家都有自己最爱的 Firefox 扩展,在使用 ChmFox 时你完全可以发挥想象力,通过组合不同的优秀扩展,提升自己的阅读体验。<br /> 这也正是 Firefox 的魅力所在。 </p> </div> </div> <div id="outline-container-4" class="outline-3"> <h3 id="sec-4">4 编译方法 </h3> <div id="text-4"> <p>虽然 ChmFox 已经支持了很多平台,但因为资源和精力有限,还是有漏网之鱼(例如问的比较多的 Mac x86_64 平台)。好在,ChmFox 是使用跨平台的 C/C++ 和 Javascript 开发的开源项目。如果有兴趣,你可以自行编译对特殊平台的支持,下面是简略的编译方式: </p> <ul> <li>安装 Python <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://python.org']);" href="/misc/goto?guid=4958185439955761087">http://python.org</a> 这是 SCons 需要的 </li> <li>安装 SCons <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://www.scons.org']);" href="/misc/goto?guid=4958185440706894345">http://www.scons.org/</a> 这是 ChmFox 的编译脚本需要的 </li> <li>下载最新的 Gecko SDK,选择合适你平台的 SDK <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://developer.mozilla.org']);" href="/misc/goto?guid=4958185441455971435">https://developer.mozilla.org/en/Gecko_SDK#Downloading</a> </li> <li>下载最新的 ChmFox 源代码 <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://bitbucket.org']);" href="/misc/goto?guid=4958185442204434130">https://bitbucket.org/zhuoqiang/chmfox</a> </li> <li>修改 ChmFox 源代码中的 chrome.manifest,增加平台说明,例如<p></p> <pre class="example">binary-component platform/Darwin_x86_64-gcc3/components/libchm.dylib ABI=Darwin_x86_64-gcc3</pre></li> <li>将 Gecko SDK 解压到某个目录,打开命令行,进入 ChmFox 源代码根目录,执行:<p></p> <pre class="example">GECKO_SDK=/full/path/to/gecko_sdk scons xpi</pre></li> </ul> <p>如果顺利,在 ChmFox 源代码根目录会新生成一个 xpi 文件,将它拖到 Firefox 中就可以安装了。<br /> 同时,欢迎将编译的结果寄给作者,作者会将你的劳动加入到下一个发行包中,让更多的人受益。 </p> </div> </div> <div id="outline-container-5" class="outline-3"> <h3 id="sec-5">5 内幕 </h3> <div id="text-5"> <p>上面大致讲了 ChmFox 的使用,如果你对 ChmFox 本身有兴趣的话,下面是关于它的一些“内幕”。 </p> <p>ChmFox 是本博的作品。内举不避亲,我也希望 ChmFox 能够帮到大家。“每一个好软件的起因都是挠到了开发者本人的痒处”,ChmFox 也不例外。几年前有一款 Firefox 扩展叫 CHM Reader,它正是 ChmFox 的前身。当时看到它确实眼前一亮,通过它,Firefox 就可以用来阅读 CHM,很多好的阅读体验也能用在 CHM 上了。而且它支持 Linux, 从此就再不用在 Linux 的众多虽勘用但都略有缺陷的 CHM 阅读软件中做选择了。连 Windows 上的 CHM 默认阅读器都可以退休了。这款扩展当时只有一个令我不爽的地方:它需要用自己单独的菜单栏打开 CHM 文件,不能直接命令行打开 CHM 文件。这样就不能进行文件关联。你需要通过变通的方式才能设置成双击 CHM 文件 Firefox 自动打开。但不管如何,这只是个小缺陷,还没有让我心痒难耐。直到 Firefox 4 发布后,似乎原作者没有要继续开发新版支持 Firefox 4 的意思,这才下决心自己挽起袖子做一款新的插件。首要的目标就是支持 Firefox 4,同时,也改进原版不能直接打开 CHM 文件的缺陷。 </p> <p>开发从今年5.1假期开始,到 ChmFox 1.1 版本被 Mozilla 审核通过,断断续续持续了两个月时间。其中真正开发的时间算下来只有3个周末。开发比我想象的要困难些。由于从没接触过 Firefox 的扩展开发,一开始花了一周的时间用来学习 CHM Reader 和其它一些扩展的代码。下面是一些流水账: </p> <ul> <li>Firefox 4 是个大版本升级,Gecko SDK 2.0 包含了很多不兼容的接口升级,原来的 CHM Reader 的接口代码都要改变。这里是<a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://developer.mozilla.org']);" href="/misc/goto?guid=4958185442942806123">参考资料</a> </li> <li>增加一个自定义的 uriContentListener,通过它把 CHM 文件的 URI 转成 上面自定义的 CHM URI,从而使 Firefox 能直接打开 CHM 文件 </li> <li>修正了一些 CHM Reader 上原有的 Bug </li> <li>制作程序图标,准备提交 Mozilla 审阅的资料 </li> <li>进一步修改程序,以符合 Mozilla 审核的标准 </li> <li>增加对 Firefox 5 的支持<p></p> </li> </ul> <p>在开发中最大的问题是 ChmFox 中使用的 binary component。它需要在每个平台上编译出各自的版本。Mozilla 又规定,Firefox 每次大版本升级,binary component 必须与最新的 Gecko SDK 一起程序编译。按现在 Firefox 一个多月出一个大版本的速度,程序编译的工作量无形增加了很多。以后 ChmFox 可能会把 binary component 干掉,用 <a onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://developer.mozilla.org']);" href="/misc/goto?guid=4958185443700126701">ctypes.jsm</a> 直接操作普通的动态库减轻升级的工作量。 </p> </div> </div> <div id="outline-container-6" class="outline-3"> <h3 id="sec-6">6 未来 </h3> <div id="text-6"> <p>虽然 ChmFox 功能简单,可细想想还是有很多可以改进的空间,下面是作者对它的一些计划: </p> <ul> <li>持续加入对 Firefox 新版本的支持(这个要吐槽一下 Firefox 疯了似的大版本升级) </li> <li>增加对新平台的支持,例如 Mac x86_64 </li> <li>增加 i18n / L10n 的支持,更加专业一些 </li> <li>可以自定义开关侧栏的快捷键,避免与其它扩展冲突 </li> <li>全文搜索 </li> <li>使用 ctypes.jsm + dynamic library 取代 binary component<p></p> </li> </ul> <p>欢迎大家在使用 ChmFox 时给它多提意见。一起帮它变的更好<br /> <br /> 转自:<a href="/misc/goto?guid=4958185444440972759">http://zhuoqiang.me/a/chmfox</a><br /> </p> </div> </div>