昨天写了一个GreaseMonkey的脚本,用于在学校网关自动登录。本来设想用httpRequest在后台模拟交互,但是网关系统的设计实在是缺乏考虑,逻辑混乱,不要说用户体验,就是基本的功能都bug百出,简直令人发指。最可恶的地方在于需要post一个中文的参数过去才能登录,这个一直没法通过MG实现,总是会变成乱码。无奈只有采取载入原页面再加以hack的方法实现。
GreaseMonkey可以在指定的页面执行user script,这对于像我这种洁癖+强迫症无疑是必备毒药,因为现在意味着你可以修改任何不好看或者不方便的页面,甚至完全重写。上述脚本中我就重写了“错误:本IP已经连线”的页面(完全不需要的愚蠢页面),改成了自己写的控制面板。
写user script是很有趣的工作,因为不仅需要写javascript,而且需要写html和css,设计界面效果,页面元素还可能与js形成模板化结合,web开发的几个层面都用到了。script的load顺序又很关键,定义早了可能白load,定义晚了又没法让前面调用。不同页面,不同阶段的副本要依靠全局状态做不同的处理,这一点又很像并行程序设计。所有这些要整合在一个js里面,连图片都要用URI格式嵌入在代码里,一切必须设计得极尽精简和谐。一个漂亮的user script,的确是种艺术。
Firefox扩展所展现的空间更加诱人,也需要更为复杂的脚本来实现,涉及到XUL、RDF、XPCOM等一系列XML技术。因为它是以浏览器即时解释的源文件形式存在的,也就天然的开源了。抛开Firefox安全、高效和对标准友好的优点不谈,正是这种自由软件的精神,良好的自定扩展能力,人人容易参与的开发形式,才造就了Firefox本身的强大能力,以及对高阶用户的极大诱惑力。
下载LoginBNU v0.1+greasemonkey0.6.7(ps:我这不是艺术)