• 2009-08-28

    自动更新Greasemonkey脚本的解决方案 - [程序]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://yourui.blogbus.com/logs/45276512.html

    Greasemonkey脚本的自动更新是一个脚本开发者经常遇到但官方又没给出解决方案的问题,因此吸引了大批仁人志士前赴后继地进行研究。在很多人为自己的脚本提供某种自动更新策略的同时,也有一些人在研究通用的解决方法,比如NullPointerUserscript Autoupdate Helpersizzlemctwizzle动态页面。站在巨人的肩膀上,我将见识过的各种方法取长补短扬长避短,架了个Google App Engine工程,写了些代码,整出了这么一个针对开发者的自认为比较终极的解决方案,目标直奔轻便简洁。对广大使用脚本的朋友来说呢,我强烈推荐lazyttrickUserscript Updater:只要安装了这个脚本,所有脚本不管本身有没有任何自动更新措施,全都免费享受终身自动升级服务——自然,缺点也是有的,比如不能提供版本号和升级原因的信息。

    下面就来介绍要为你的脚本添加自动更新功能,使用本解决方案应该如何操作——当然,现在只有中文版本,只能支持userscripts.org上的脚本;并且只适用于Firefox,在其他支持GM的浏览器中一概情况不明。

     

    最少操作:

    简单到只需要在你的脚本的注释段(也称meta部分)添加一行代码。比如说豆瓣屏蔽脚本的id是25280,那么:

    // @require http://userscript-updater-generator.appspot.com/?id=25280

    对于你的脚本,将25280换成其在userscripts.org上的id即可。加入这行代码后,你的脚本会在GM菜单中添加“立即更新xx脚本”的菜单项,并且每12个小时检查一次更新;只要userscripts.org上的脚本有了更新(判断条件是网站自动生成的@uso:version标示的增长,而不是@version标示的增长,因此每一次更新都不会错过),就会弹出对话框提示用户更新脚本。

    URL可选参数:

    在url中传递的参数除了必需的id外,还可以有day和hour。这两个参数都是用来设置检查脚本更新时间间隔的,合法的值都是正整数。url里day和hour两个参数并存时,检查间隔是两者之和,比如day=2&hour=12,就是每隔两天半检查一次。当这两个参数都不存在或都不合法时,默认每12个小时检查一次。作为例子,以下三个url都是合法的:

    http://userscript-updater-generator.appspot.com/?id=25280&day=35&hour=57
    http://userscript-updater-generator.appspot.com/?id=25280&day=7
    http://userscript-updater-generator.appspot.com/?id=25280&hour=48

    其他可选项:

    通过在脚本注释段(meta部分)添加其他信息,可以获得更好的提示效果。可以添加的信息有:

    // @title <脚本名>
    脚本名在添加菜单项和弹出对话框提示里都会用到。如果没有@title,就会以@name的标示作为脚本名;如果连@name都没有(这个一般不会发生),就会以“[<脚本id>]”作为脚本名。很多脚本的@name标示是英文的,如果要显示中文脚本名,可以写在@title里(脚本名结尾带不带“脚本”两个字都行,程序能够自动识别处理:对“xyz脚本”和“xyz”,提示信息都是一样的)。

    // @version <版本号>
    脚本的更新与否并不依赖@version标示,但是当存在@version标示时,如果新版本的@version标示高于上个版本的@version标示,那么在提示更新时会显示脚本已更新至xxx版。

    /* @reason
    <更新说明>
    @end */

    作为@version标示的附属存在。如果@version标示增长了,并且@reason标示存在,那么在提示脚本已更新至xxx版的同时也会显示更新说明。

     

    最后再次对各位脚本前辈表示敬意,并且欢迎各位开发者按如上方法给自己的脚本添加自动更新;如果对使用方法和可选项还有什么疑惑,这里提供豆瓣屏蔽脚本作为范例参考。


    收藏到:Del.icio.us