NOV

6

Sun

Author:EMINARCISSUS

被拍砖15次,接着砸!

时代变化真快,Netscape->IE->Firefox & Opera -> Safari & Chrome,依然记得自己拥有的第一台Toshiba笔记本电脑,从拿到电脑开始到自己背着自己的电脑远赴日不落帝国见学之间的大半年,开机无非Red alert,Starcraft,以及各种国产RPG。无论如何,这时的自己却从来未考虑过是否有工具可以通过这样的一个盒子来交流,也从来没有考虑过用这样的一个盒子来传达自己的想法,亦或接受时代的潮流。直到自己来到日不落的第一天,电脑课,老师教我们打开了第一个网站Google,试着用拼音拼出了zhong guo,我来到了当时自己上得最多的一个站点——Sina,随着自己点开Sina的一刻,我明白了,自己该要启程了。(大雾,被拖走

跑题了。先简单解释一下什么是Userscript:

页面执行的一些功能,多数是通过Javascript和Flash来实现的。Userscript则是用户端所执行的功能函数。

所以最简单地说什么是Userscript:

我觉得这个网站设计的很不爽,我要让其人性化一些。

于是,就有了各种tweet站点功能的脚本。其中Userscript则是用户脚本的一个集中托管站点,浏览器插件所能实现的大多数功能其实多数也可以通过油猴脚本实现。而且通过油猴实现有一个很大的优点,就是不用过分介意浏览器的升级,并且拥有一定的可移植的可能。当然也有很大的局限性,其中包括但不限于Tab管理,ContextMenu Change等等。不过不管怎么说,通过Userscript,我们可以实现很多站点默认不能实现或者不愿意实现的功能来简化我们日常的操作。

当然,Userscript的实现方式的区别也带来了这样的些缺点——不同浏览器之间对GM函数的支持有所不同。

于是,这里仅就最单纯的东西进行一些介绍好了。

首先

Firefox:

1:Greasemonkey

Firefox应该是最早应用userscript的浏览器了(个人所知),其中Greasemonkey更是创造了userscript开发的奇迹,其强大的功能以及逐渐优化到如今所有的沙箱化操作都称为了如今开发userscrip支持插件的标准

2 : Scriptish

这个我也没用过,不过因为增加了Update和很多便于开发者利用的API,而Greasemonkey也因为趋于稳定长时间未更新,所以愿意尝新的童鞋的可以用这个来代替Greasemonkey(也有点比较奇葩的bug)

 

安装方法:

打开Firefox

工具(Tools)->插件管理(Add-ons)->获取插件(Get-Addons)->上面搜索栏输入Greasemonkey或Scriptish->Install

然后在这里搜索Greasemonkey或者scriptish就可以了,安装Install后可以下载user.js用户脚本后拖入浏览器则可自动安装。

Chrome:

Chrome可以说在Userscript上确实是度过了一段比较坑爹的时期,主要原因就是Google这家“不作恶”的公司在做很多用户产品的时候都做了一些很坑爹的不合理的设定,比如Userscript。

从Chrome刚出的时候就听说Chrome原生支持Userscript,当时听说了这个消息还很兴奋,当用的第一天就发现,自己着着实实被套牢了。无沙箱支持,无跨域请求支持,于是留下的,就是一具空壳...

后面陆续作出的插件就解决了这些问题。包括(Blank Canvas Script Handler,Tampermonkey,Ninjakit)

这里只介绍和推荐Tampermonkey(其他的我没用过不熟)。

主要原因就是Tampermonkey的现任维护者就是Greasemonkey的开发者,虽然在兼容性还存在一定问题(机制上的问题),不过多数情况都可以通过比较简单的Tweak来实现兼容的。

安装方法:

打开Chrome->打开地址->左侧地址栏输入Tampermonkey->点击Install

 

Opera:

Opera是除了Chrome以外另外一个让人感觉很坑爹的浏览器,和Chrome一样,原生支持userscript,可惜直到现在,都没有找到Opera的userscript实现沙箱的方法,不过却在Opera 9升级后通过对userscript的执行机制的修改实现了跨域的可能。虽然如此,Opera还是一定程度上能够兼容多数GM脚本的,不过部分GM函数和Meta则无法支持,会带来一定的兼容性问题。

安装方法:

打开Opera后点击设置(Preference)

然后如图设置:

 

点击Javascript Options(Javascript选项)后,在Userscript Folder那里输入你存放用户脚本的实际目录(比如D:\Opera\USERJS),目录存放位置可以随意定义。初步设置完成。

这里需要解决跨域和HTTPS下USERJS的使用问题:

在地址栏输入about:config里修改如下项目:

修改JS Storage的空间上限,实现跨域需要。

HTTPS页面也使用UERSCRIPT

当然实现GM函数和跨域需要下载一些前置脚本来实现,这里放上自己的,如果对偶不信任的童鞋可以爬帖自炊,这里提供一份mediafire的自己用的前置脚本的分流。

a.对偶信任的可以直接下回来解压后扔进自己的userscript脚本目录

GM函数以及跨域实现

b.不信任的童鞋

GM_emulation脚本以及跨域请求脚本请参阅:

http://userscripts.org/scripts/show/88932

便于寻找留一份原作者分流

下载回来之后放进Opera的Userscript文件夹里,同时将http://userscripts.org/scripts/show/88932拉回来的脚本改名为aab-greasemonkey-emulation.user.js
初始工作完成
之后下载http://userscripts.org/scripts/review/109306

准备工作完成。

 

P.S.Userjs在Opera上的运行慢的很....可能页面出来要5-10s才能加载完成,所以调试的时候经常是否出错了自己都不知道。


Safari

Safari上的Userscript发展史也异常纠结,在Safari支持插件之前只能通过SIMBL和GreaseKit实现,虽然可以解决一些问题,不过跨域和沙箱的问题一直都没有得到解决。直到Extension的出现,Safari才出现了一个像样的插件,即——Ninjakit。安转前需开启Extension支持。

开启Extension

需要安装的童鞋可以直接去作者的官方页面下载,下载地址,不过自己却不推荐直接用作者的这个版本,因为里面跨域请求的代码部分有一些小问题,自己做的一些小fix,已经提交了作者但是还未回应,于是如果信任偶的童鞋可以直接用偶自己打包好的版本。

JS分流

Mirror

当然,不信任的童鞋暂时偶也没什么好办法,只能等原作者更新了。偶修改的部分:

1:GM_xmlhttprequest的请求头未装载

2:GM_xmlhttprequest非async请求,无法追踪status。

3: unsafeWindow支持

而且因为Safari的Extension的执行是完全沙箱化的,所以,暂时没找到办法访问unsafeWindow,这个应该会有其他的trick能够解决,所以在兼容性上是会有一定问题的。不过多数脚本试验后还是可以正常运行的。

 

IE等其他浏览器:

这一点只能暂时说抱歉了,早期的IE5和IE6还是有GM支持的,非常局限的一些功能,如今的IE因为一些众所周知的原因逐渐被众开发者所抛弃,这里只能期待从IE9开始逐渐开始非主流的微软能够重新振奋一下开发者,为开发者提供一个相对Identical的平台来实现作业了。

至于如360浏览器,世界窗浏览器之类的,我不熟悉,或许有其他达人有使用经验的,欢迎提议拍砖,自己也会陆续更新。

userscript.org上脚本安装方法:

支持的浏览器在安装完各自的GM插件后,进入想下载的userscript托管页面,然后点击Install即可。如ThunderAssistant

 

smiley