作者:屈超(Chappell.Wat)
发布时间:October 12, 2008
分类:程式::五代
7 Comments
好久没空来写点儿东西了……
今天给带来昨天刚完成的一款 Firefox 扩展……
习惯在 Firefox 里使用外部编辑器查看 HTML 源码……
然而它一直都存在这样一个 Bug ……(如图)

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

最后有三点需要注意……
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 计划中……
但将在解决自动判断编码的问题后提供……
作者:屈超(Chappell.Wat)
发布时间:July 30, 2008
分类:程式::五代
27 Comments
[最近更新]
根据名为 Golf_CN 的网友所指出的错误……
将“单实例”的说法改为“单窗口”……
以防误导各位……
SingletonFox 是我新近编写的一款 Firefox 扩展……
目的非常单纯……
就是为了强制 Firefox 始终保持单实例状态运行……
依稀记得早在 1.5 时代……
Firefox 本身通过参数配置便可实现单实例运行的……
而 2.0 之后就消失掉了……
大家转向使用个 Tab Mix Plus (以下简称 TMP)来实现……
但 TMP 太过臃肿……
很多国内用户都用 Tab Mix Lite CE (以下简称 TML CE)……
遗憾的是 TML CE 并不提供类似功能……
有的同学可能认为自己没遇到过多实例 Firefox 的状态……
诚然……
你通过修改 Pref.js 的设置确实能在很多地方强制使用标签页浏览……
但你仍然可以通过其它各种途径“不经意间”开启多实例……
(TMP 扩展用户不在此列……)
比如按住 Shift 单击链接……
比如在链接的右键上下文菜单上选择“New Window”……
再比如直接重新开启一个新 Firefox 程序……
这时你会发现 Firefox 有多个实例……
并且共用一套 Session 系统……
开发团队的确用心良苦……
(注意要转折了……)
但是……
这个世界上终究有些人还是更愿意单实例运行的……
比如我……
于是……
在寻找可用方案无果的情况下……
我写了这个插件……
不知道 TMP 是如何实现的……
我的做法是在 Firefox 实例化时进行检查……
如果实例已存在便将新实例里的标签页全部移交给之前的那个……
然后关闭新实例……
然后……
强烈建议配合 TML CE 使用……
这下又多一个抛弃臃肿的 TMP 的理由了……
另外……
扩展我已经提交到 Mozilla 官方了……
照例还是在 SandBox 里……
有帐号且支持本扩展的同学可以帮忙评论一下……
这是它逃离 SandBox 的唯一途径……
今天就到这儿了……
有意见请留言……
[更新记录]
[08-07-18 ] 1.0: 初始发布
[08-07-25 ] 1.1: 禁用新建窗口功能并覆写相关设置
[08-07-30 ] 1.2: 将 Shift + Click 打开新窗口修改为打开新标签
提供扩展下载……
国外: http://www.quchao.com/projects/mozilla/firefox/extension/SingletonFox.xpi
国内: http://vip.yyjoy.com/chappell/mozilla/firefox/extension/SingletonFox.xpi
官方: https://addons.mozilla.org/zh-CN/firefox/addon/8182
另为 userChrome.js 用户提供脚本版下载……
(实际上最初我就写的脚本版)
功能完全相同……
国外: http://www.quchao.com/projects/mozilla/firefox/userchrome_js/singletonFox.uc.js
国内: http://vip.yyjoy.com/chappell/mozilla/firefox/userchrome_js/singletonFox.uc.js
作者:屈超(Chappell.Wat)
发布时间:July 5, 2008
分类:程式::五代
5 Comments
之前有同学报告说之前的天涯助手脚本失效了……
原来是天涯更新界面代码的缘故……
(很抱歉我并不很常去那里……)
仔细一检查才知道其增加了官方的“只看楼主”的功能……
只可惜未注册用户是无法享用的……
在某论坛得知了另一种启用“只看楼主”功能的方法……
也即通过 oTianYa.cn 来辅助实现……
oTianYa 的原理很简单……
用服务端文件去采集用户欲访问的帖子……
然后处理内容并过滤后显示……
与之前我编写的天涯助手脚本之间的区别……
无非在于它是服务端处理的第三方实现……
不过说实话……
目前在“高亮楼主”和“只看楼主”之间的切换动作会产生页面刷新……
(而天涯助手则不需要……)
当然啦……
作为一个网站……
追求 PV 是无可厚非的……
另一方面……
由于是第三方网站……
图片的“盗链”问题是存在的……
有兴趣的同志也可以安装 RefControl 来解决……
但脚本就没有此限制……
不管怎么说……
它不失为实现这些增强功能的另一种方法……
由于天涯助手的最新版本尚在编写中……
我先编写了本文中的“天涯助手 Lite”……
可以方便大家使用 oTianYa 提供的功能……
除了原先天涯助手所提供的“高亮楼主”和“只看楼主”之外……
还增加了简单的“广告过滤”功能……
与原先的版本一样……
Lite 版也同时提供“猴子脚本命令”和“浮动控制栏”两种控制方式……
(最原始版所提供的快捷键功能已被移除……)
其中猴子脚本命令的操作方法是:
在猴子图标上点击右键并选择 User Script Commands……
选项有……
1.天涯助手 Lite - 隐藏浮栏/恢复
2.天涯助手 Lite - 只看楼主/恢复
3.天涯助手 Lite - 高亮楼主/恢复
(如下图)

由于和之前的天涯助手功能和操作方法均差不多……
所以就介绍到这里……
有问题请留言……
感兴趣的朋友可以直接下载试用……
国外用户:http://www.QuChao.com/Projects/UserScripts/Tianya_Helper_Lite.user.js
国内用户:http://VIP.YYJoy.com/Chappell/UserScripts/Tianya_Helper_Lite.user.js
脚本官方:http://UserScripts.org/Scripts/Source/29641.User.js
最后说点儿近期安排……
由于马上动身去杭州……
所以天涯助手的更新应该会延后……
而解决“隐性特殊链”的 SpeciLink 开发工作也会延后哦……
作者:屈超(Chappell.Wat)
发布时间:June 3, 2008
分类:程式::五代,笔记::千草
4 Comments

之前主要用 Google Reader ……
但在线工具毕竟是在线工具……
没有手感 -__- ……
在我还没下定决心用 Google Gear 之前……
我想到了用 ThunderBird ……
好歹自己也算是个 ThunderBird 的拥趸了……
不仅仅只是把它作为一个邮件终端……
还利用其强悍的 Filter 和 Tag 功能管理邮件列表、订阅新闻组……
然后配合 Lightning 、Google Calendar 和 Treo 来实现 GTD ……
这次将其提拔为 RSS 阅读器实在是最近有点儿心痒……
想折腾折腾工作环境……
好吧……
入正题……
有人可能会问……
「Firefox 不是允许选择线下 RSS 阅读软件么?」
是的……
的确可以……
但是你可以指定 ThunderBird 作为阅读器试试看……
点击 "Subscribe Now" 后除了呼出 ThunderBird 外并没有执行订阅操作……
自家人都不认自家人了……
像个什么话!
屡试屡爽之后……
我意识到这可能是个 Bug ……
二话不说上 Bugzilla 一搜……
果然就就是 Bug 350735 ……
不过前年的 Bug 至今还没解决还真是有点儿那啥……
继续搜索……
找到几种解决临时方案……
其中在 MozillaZine 论坛找到的方案应该是最通用的一种了……
作者 alta88 说是由于 Thunderbird 接受 Feed 的参数与 Firefox 发送的不符而造成的……
知道原因就好办了……
马上搜索 ThunderBird 源码……
在 components\newsblog.js 中找到了如下代码:
(Portable ThunderBird 位于 App\thunderbird\components\newsblog.js)
/* nsICommandLineHandler */
handle : function(cmdLine)
{
// we only care about "-mail someurl" where someurl is a feed: url
// we also don't want to remove the parameter in case we don't end up handling it...
var mailPos = cmdLine.findFlag("mail", false);
if (mailPos != -1 && cmdLine.length >= mailPos )
{
var uriStr = cmdLine.getArgument(mailPos + 1);
if (/^feed:/i.test(uriStr))
{
var mailWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService()
.QueryInterface(Components.interfaces.nsIWindowMediator).getMostRecentWindow("mail:3pane");
// if we don't have a 3 pane window visible already, then we can optimize and do nothing here,
// that will let the default command line handler create a 3pane window for us using the feed
// URL as an argument to that window when it gets constructed...so we only care about the
// case where we want to re-use an existing 3 pane to subscribe to the feed url
if (mailWindow)
{
cmdLine.handleFlagWithParam("mail", false); // eat up the arguments we are now handling
cmdLine.preventDefault = true; // prevent the default cmd line handler from doing anything
var feedHandler = Components.classes["@mozilla.org/newsblog-feed-downloader;1"].getService(Components.interfaces.nsINewsBlogFeedDownloader);
if (feedHandler)
feedHandler.subscribeToFeed(uriStr, null, mailWindow.msgWindow);
}
}
}
},
显然可以看出……
ThunderBird 要求 Feed 作为 Mail 参数来传递……
具体格式为:
thunderbird.exe -mail feed:URL
我在命令行下测试如下命令……
thunderbird.exe -mail feed:http://www.quchao.com/feed/
果然成功地订阅成功……
问题找出来就好解决了……
两种方案……
让 Firefox 附上参数……
或让 ThunderBird 忽略参数……
显然添加参数比忽略参数要安全……
毕竟 ThunderBird 不只是 RSS 阅读器而已……
忽略掉参数怕会影响其它的服务哟……
那么就拿 Firefox 开刀吧……
看了 alta88 的解决方案……
他增加了两个 pref 变量用来保存参数和 Feed 协议……
很通用的方法……
但我个人觉得没有必要……
不如直接判断阅读器的文件名……
包含 Thunderbird 变添加参数后发送……
一来不必往 Pref 里添加并不常用的变量……(洁癖作祟?)
二来其它 RSS 阅读器没准就直接支持 Firefox 的方式……
我的修改方法如下:
找到 Firefox 的 components\FeedConverter.js 文件……
(Portable 版本位于 App\firefox\components\FeedConverter.js)
搜索:
var ios =
Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
var feedURI = ios.newURI(spec, null, null);
if (feedURI.schemeIs("http")) {
feedURI.scheme = "feed";
spec = feedURI.spec;
}
else
spec = "feed:" + spec;
var ss =
Cc["@mozilla.org/browser/shell-service;1"].
getService(Ci.nsIShellService);
ss.openApplicationWithURI(clientApp, spec);
替换为:
// Hacked by Chappell.Wat from http://QuChao.com @ 2008-6-3
if (clientApp.persistentDescriptor.toLowerCase().indexOf('thunderbird') != -1) {
var targetFile = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
try {
targetFile.initWithPath(clientApp.persistentDescriptor);
}
catch(e) {
alert(e);
return(false);
}
if (!targetFile.exists()) {
alert('Client Does Not Exists.');
return(false);
}
spec = 'feed:' + spec;
var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess);
process.init(targetFile);
var arguments = ['-mail', spec];
process.run(false, arguments, arguments.length,{});
} else {
var ios =
Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
var feedURI = ios.newURI(spec, null, null);
if (feedURI.schemeIs("http")) {
feedURI.scheme = "feed";
spec = feedURI.spec;
}
else
spec = "feed:" + spec;
var ss =
Cc["@mozilla.org/browser/shell-service;1"].
getService(Ci.nsIShellService);
ss.openApplicationWithURI(clientApp, spec);
}
原理是判断阅读器文件名……
包含 "thunderbird" 便发送 -mail 参数……
至于为何要换 openApplicationWithURI 函数为 run ……
事出无奈……
openApplicationWithURI 似乎无法发送形如 -mail feed:URL 的参数……
且源码应该是被封在 browser.xpt 里……
不过使用效果一样就行了……
最后……
轮到测试时间了……
测试之前我建议还没有在 ThunderBird 里建立 RSS 账户的朋友去新建一个……
(File -> New -> Account... -> RSS News & Blogs)
我当初修改了好久均无法调用订阅动作……
看了代码才知道是没有 RSS 账户提供绑定……
(详见 components\newsblog.js 文件的 120-132 行 )
下面跟着我一起访问 feed:http//www.quchao.com/feed/
(要是觉得慢也可以自己随便找个源喔……)
浏览器会把你带到订阅界面……
在下拉菜单中选择 "Choose Application" 并定位于你的 ThunderBird ……
(如顶图)
接下来猛击 "Subscribe Now"……
不出意外 ThunderBird 应该被激活(或启动)来验证 Feed 地址……
如果验证无误……
这个 Feed 应该就乖乖躺在你的 RSS 账户里了……
如果没有它躺下……
您可以在本文后留下您遇到的问题……
我会尽力解答……

题外话一:
如果你和我一样由于邮箱太多……
新建的 RSS 账户位于底部看不见的话……
我建议使用 FolderPane Tools 来调整账户的顺序……
(如上图)
题外话二:
如果你和我一样不习惯将 RSS 和 Mail 数据放在一起的话……
你可以看看这篇文章……
顺便说一下我的 RSS 账户 ID 是 11……
(现在你知道我到底在 ThunderBird 里放了多少东西了吧)
修改完后……
RSS、邮件和新闻组的数据放在不同的文件夹……
看着舒心……
用着也放心……
题外话三:
很早之前用过一个名为 RSS News Ticker 的软件……
相当好用……
但是该软件的更新是全局式的……
比如你设置 10 分钟更新一次……
那么不管 RSS 有没有显示完它都会“敬业”地进行更新……
我的想法是仅仅订阅一个源……
这个源包含所有我未读 RSS ……
是否能通过编写 Thunderbird 扩展来完成呢……
考虑ing……
作者:屈超(Chappell.Wat)
发布时间:May 26, 2008
分类:数位::六本木
16 Comments
[最新变动]
更新到 5.3.0.1638 ……
添加词条:5 ……
更新词条:4 ……
修复错误:10 ……
下载地址更新……
其实我已经彻底投入“四大天王”的怀抱了……
内置 Calendar + Snoozy + RollOver + Mother! ……
容量瞬间节省 1M 多……
对于 Treo650 这是多么大的善举呵……
============ 华丽的分割 ============
其实我不用中文版已经有些时日了……
毕竟英文的某些 agenda 类型的词条翻译过来会显得不太贴切……
保持本语言包的更新……
一来是为了造福胖友……
二来则是不想让之前的工作付诸东流……
如有港台朋友愿意进行繁体用语调整可以直接编辑 loc 文件……
不过请至少保留本日志的地址以便他人寻找更新……
另外我还考虑投递至官方试试……
反正我也即将逃离 Agendus 阵营……
大不了“理直气壮”地跟官方说我不是海贼版用户嘛……
(脸红 ing……)
============ 华丽的分割 ============


自从用上 Palm 以来……
一直离不开 Agendus 这个强大的日程管理软体……
最近它分别释出 PC 端和 Palm 端的新版(v.4 和 v.11)……
凉鞋俺这个死忠当然得首先试用……
Palm 端的新版与 Clie TJ37 在 Trip View 下依旧有冲突……
但与 Treo 650 暂时没发现冲突……(持续测试中)
Palm 我尚未开始汉化……
等闲下来我也会一齐汉化……
PC 端我一直使用的是 Palm Desktop 版本……
通过设置快捷工具完全可以替代 Palm Desktop 的功用……
于是凉鞋我花了三个晚上将 PC 端完全汉化……
汉化文件虽然是针对 Palm Desktop 版本而制作……
但我汉化时注意到里面也包含针对 Outlook 版本的词条……
所以我相信这个汉化文件可以适用于 PC 端的所有版本……
汉化全部手工完成……
除了个别词条还需斟酌之外……
其它都应与平时的使用相一致了……
PS:未针对繁体中文用户习惯进行优化……
有心的港台朋友可以自行编辑……
而所谓的‘绿色’版本是我的个人爱好而已……
(现在包括服务器在内 95% 的软体都是绿色的鸟……开心……)
我从最新的安装软体里头抽出来的……
所以版本和功能上毋庸担心……
绝对和安装版一样……
而且……
试用期过了以后你同样需要注册后才能使用……
现在提供该绿色版本下载:
(PS: 顾忌版权纠纷…… 下载包不含注册码……)
Agendus for Windows
Version 5.3.0 Build 1638
Palm Desktop Edition
国内镜像:(请右键另存)
简体语言包:
http://VIP.YYJoy.com/Chappell/Agendus/Simplified_Chinese.loc
繁体语言包:
http://VIP.YYJoy.com/Chappell/Agendus/Traditional_Chinese.loc海外镜像:(请右键另存)
简体语言包:http://www.QuChao.com/Projects/Agendus/Simplified_Chinese.loc
繁体语言包:http://www.QuChao.com/Projects/Agendus/Traditional_Chinese.loc
[使用方法]
放置到 Agendus 根目录下……
在 Agendus 中选择 “简体中文”或“繁體中文”……
然后重启 Agendus 程序……
Done……
有任何问题就留言吧……
我睡觉去了……
[更新记录]
06-07-21 : 更新至 4.0.4 Build 1449
06-09-02 : 更新至 4.0.5 Build 1451
06-11-06 : 补档,上传简繁语言包供 OutLook 版使用
06-11-16 : 更新至 4.2.2 Build 1474
07-05-01 : 更新至 4.3.0 Build 1493
08-02-03: 更新至 5.1.0 Build 1600,修正多处 Bug
08-05-26: 更新至 5.3.0 Build 1638
- «
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- ...
- 27
- »