Firefox 在安装完成的时候,会问你要不要导入其它浏览器的数据,比如说导入 IE 的 cookie, history 之类。导入的代码在
browser/components/migration/src/nsIEProfileMigrator.cpp
其中,导入 cookie 的代码是:
这部分代码很长,我就不完整地贴在这里了。大体上就是想办法找到 IE 保存 cookie 文件的路径,其中 Vista 如果开启了 UAC 位置还不一样,还要分别作判断,然后把文件一个一个读进来。这样的实现其实并不完美。Win32 已经提供了一条现成的 API:
其中第一个参数如果设置为 "cookie:" 的话,就可以枚举出所有保存的 cookie. 这个 api 从 Windows 2000 开始就提供了,而 Windows 2000 也是 Firefox 所支持的最低版本的 Windows,所以没有兼容性的问题。
用好 Win32 API,往往可以起到事半功倍的效果。