—— Where exceptions happen.

2008年12月24日星期三

给GreaseMonkey脚本添加自动更新

上个月我给自己的GreaseMonkey脚本写了一段自动更新的代码,不过我实在受不了在user.js文件之间复制代码片段(一股代码腐败的不祥气息),就算为了自利利人,我把这个封装好的对象放在一个单独js文件里,上传到Google Code上了,现在如果你写GreaseMonkey脚本,添加自动更新的简洁方案如下:

1. 给你的userscript脚本注释段添加如下代码
// @require http://userscript-autoupdate-helper.googlecode.com/svn/trunk/autoupdatehelper.js
// @version <版本号>
/* @reason
<更新说明>
@end*/

(@require后面就是上传到google code里的自动更新用代码,里面定义了一个Updater对象,用法见下。<更新说明>会在客户端脚本发现版本号小于userscript.org服务器端版本号时在弹出对话框中显示)

2. 在脚本开头部分添加类似下面的代码片段
var thisScript = {
name: "Delicious自动保存", //脚本名称,请自行修改
id: "35778", //脚本在userscripts.org的id,请自行修改
version:"1.4" // 当前脚本版本号,请自行修改
}
var updater = new Updater(thisScript); // 用thisScript对象创建一个更新器对象
updater.check(); //检查是否有更新


3. 可选的功能是另行设置更新频率(默认是10小时check一次),
在updater.check() 之前调用 updater.setHoursToCheck(t) 即可,
如updater.setHoursToCheck(24) ,则至少与上次检查时间相隔24小时才再次检查。

另外,在更新器对象创建之后,用户也可以右键GreaseMonkey图标,从“用户脚本命令”中选择手动更新脚本。

ps. 这个更新器目前是纯中文版本,所以也不写英文的发布声明了。看GreaseMonkey社区已经有自动更新用的代码片段在流传,不过直接复制粘贴大段代码我总觉得哪里不对 :-P

--
2008年12月25日 补注:
有人告诉我
“@require http://userscript-autoupdate-helper.googlecode.com/svn/trunk/autoupdatehelper.js 不行啊,直接复制倒可以”

在此补充说明一下:GreaseMonkey 0.8版增加的这个特性
@require 在安装脚本时生效,GM会自动下载 url 里指定的js文件到安装目录,直接在脚本里手工修改的话就会不行。对作者而言要先写好上传,然后安装,就能确认生效。 对脚本作者是麻烦一点,不过对用户是透明的。。。而用@require的好处可以简单的总结为:不仅快是生产力,清晰也是生产力。