"人人网点赞狂魔的开发"

Published: Sat 28 December 2013
By Ray

In 2013.

之前在人人网上看到一张图,说点赞狂魔眼中的赞,已经不赞,而是朕已阅,于是,我就想搞这么个脚本,来实现这个功能~

先上效果图:

我用的是Tampermonkey(简称TM,也就是俗称的油猴)这个Chrome插件来运行我的脚本。之前有直接写过Chrome插件,但是上架和推广比较麻烦,Chrome市场要收费,很坑。这么轻量级的功能,写个小脚本,然后用油猴来运行就好~

开发过程

  • 找TM的Example

Tampermonkey的官网上竟然没有提供任何的example,这一点都不科学!这位同学写出了很详尽的example。仿照它,我们就可以实现我们想做的功能了。

要注意,TM的程序头的那些,不是注释,而是有意义的类似配置文件的部分。比如说,脚本的名称,就是在@name这一行命名的,而不会在保存的时候输入名称。

  • 查找结点 通过在人人网上审查元素,我发现,有关'赞'的控件的id都是以'ILike'开头的,于是,DFS找到匹配这些id的node,再改掉它的innerHTML就好了。实测每秒运行一次这个脚本更新innerHTML,不会太卡。

  • 上架 在userscripts.org上上架。这里是最终上架后的页面。

TODO

  1. 每秒运行一次脚本的话,效率太低。最好的办法应该是为人人网点赞的JS加上一小段更新innerHTML的部分。

  2. 写一个用户友好的前端,然后把这个脚本上架到Chrome应用商店里。这样就可以让更多更小白的用户来使用这个脚本了。

以上两点现在还懒得搞...

源代码

已经上传至我的Github

一些Debug的笔记

  • 不友好的Debug

即使我一行代码也没写,Chrome加载完TM也会报错。事实上,有些网站本身在Console里就会报错。更严重的是,在Debug我的脚本的时候,TM只给出有错,但并不给出哪一行有错。非常不友好。

  • 关于match部分

记得在域名的结尾处加上/*,就像下面这样

// @match      http://www.baidu.com/*

而像这样是不行

// @match      http://www.baidu.com*

我觉得很奇怪,因为在正则表达式中*表示零个或多个字符

  • 注意你的输入法!

小心在JS中输入了汉语的,或者是全角的空格。这种错误是人眼不可见的。我曾经在某配置文件的行尾多打了个空格,导致整个十一假期都在调试,本来都订好去草原上露宿的帐篷了...

  • DFS

刚开始的时候DFS一次全局元素,非常的慢,不过我也懒的改了...实测document.getElementsByClass()和JQuery中的$(".classname")都不好用,我不知道怎么把单独的一个元素拿出来再修改innerHTML。对于人人网主页,DFS一次的时间开销可以忽略。就这样吧...

  • className

要取出来元素i的class,要用i.className而不是i.class

  • TM的加载问题

有的时候在本地更新完脚本,TM那里并不会加载进去,这时候让TM检查下更新,还不行的话只能重启浏览器了

links

social