好久没空来写点儿东西了……
今天给带来昨天刚完成的一款 Firefox 扩展……

习惯在 Firefox 里使用外部编辑器查看 HTML 源码……
然而它一直都存在这样一个 Bug ……(如图)

Encoding Bug with Source Viewing in Firefox

这个 Bug 在 Window 下所有版本的 Firefox 都存在……
原因十分简单……
Firefox 将源代码存到 windows 的 temp 文件夹后……
忘了给文件名转码……
此时源码文件的文件名是 non-unicode 编码的……
而在 Firefox 内部却是 unicode 的……
等你执行 View Page Source 命令后……
Firefox 将文件名作为参数发送给你所设置的外部编辑器……
编辑器当然找不到源码文件路径……
这也解释了为何我们可以用外部编辑器正常打开英文网站的源码……

实上在 Bugzilla 上是可以找到相关的 Bug 报告……
比如以下两个:
https://bugzilla.mozilla.org/show_bug.cgi?id=172817
https://bugzilla.mozilla.org/show_bug.cgi?id=408923

既然有 Bug 我们来修复就好了……
这就是我这个扩展的主要功能……
安装后它会修改与查看源码相关的相关函数……
把临时文件的文件名正确转码后才发送给你的编辑器……
这样就能正确打开了……(如图)

Encoding Bugfixes

最后有三点需要注意……
1. 该 Bug 仅当使用外部编辑器查看源码时存在……
如果你使用 Firefox 内部页查看源码……
请无视……
如果你想从现在开始使用外部编辑器来查看源码……
请将 view_source.editor.external 设为 true ……
并把外部编辑器的路径写到 view_source.editor.path ……

2. 本扩展目前仅适用于简体中文用户……
因为我还没找到从 Firefox 里获取用户 non-unicode 默认编码的方法……
在注册表中没有找到……
有线索的朋友可以留言告诉我哟……

3. 装本扩展仅能解决 Firefox 内置的查看源码的方法……
Firebug 的 Open with Editor (打开编辑器)功能虽然使用的自建方法……
(请看清:是右键和菜单栏下的一个功能组……)
但仍然会存在乱码问题……
不同的是用 Firebug 所提供的该功能打开源码看到的是内容乱码……
因为它根本就没有对网页内容进行转码(见其 editor.js 功能)……
有兴趣的朋友可以使用 converter-output-stream 组件的 nsIConverterOutputStream 接口来修复该问题……
至于 Firebug 为何在打开文件时不存在乱码问题……
原因很简单……
它的临时文件的文件名是一水儿的 ascii 字符……(笑)

由此引出三个 Todo……
1. 下个版本会在选项面板提供一个文件浏览控件……
方便你简单地设置外部编辑器路径……

2. 自动判断用户的 non-unicode 默认编码值……

3. 考虑解决 Firebug 的外部编辑器乱码 Bug 并提交给 Firebug 官方…… 但不确定人家要不要……

(已于 2008.10.15 解决,详见这篇日志

呵呵……
解决上面几个问题……
本扩展就迎来其 1.0 版本……

哦对了……
支持 2.0 - 3.0.* 的所有版本……
事实上在我的 3.2 beta pre 上也工作正常……

最后提供下载……

国外: http://www.quchao.com/projects/mozilla/firefox/extension/viewSourceInExternalEditorBugfixer.xpi
国内: http://vip.yyjoy.com/chappell/mozilla/firefox/extension/viewSourceInExternalEditorBugfixer.xpi

userChrome.js 计划中……
但将在解决自动判断编码的问题后提供……

标签: none

已有 7 条评论

  1. Chao QU Chao QU

    @闲耘
    是的,
    该作者改了 firefox 的内部组件,
    可以直接发送 UTF8 编码的命令给程序了。
    该组件开源。

  2. 闲耘 闲耘

    直接使用ViewSourceWith扩展就可以,无论使用Editplus,还是gvim,我都没遇到乱码问题。

  3. Chao QU Chao QU

    @evan
    你这样判断是不正确的。
    比如在我的设置里其值就是 UTF8。

    要解决这个问题,
    应该获取系统对待非 unicode 程序时所使用的编码。
    其实在此之前我已想到了一些方法,
    但目前仅限于 windows。

  4. evan evan

    自动判断编码:
    var prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
    ISUC.charset=prefs.getCharPref("intl.charset.default");

  5. evan evan

    最近也碰到这个问题, 感谢您的研究!

  6. 時計坂一刻館三号室 » 部落格存档 » [081015] 为 Firebug 修复外部编辑器的乱码 Bug……

    [...] « [081011] View Source in External Editor Bugfixer 0.9b …… [...]

  7. gowers gowers

    不错,下下来看看,谢谢!

添加新评论