<aside>
💡 目录(温馨提示: ⌘ + ⌥ + T
展开/折叠全部内容)
</aside>
油猴脚本,正式的叫法是用户脚本(user script)。之所以叫做「油猴」,是因为第一个制作这个浏览器扩展的作者 Aaron Boodman 起名叫做 Greasymonkey,中文直译就是「油腻的猴子」;后面其他脚本开发的时候,基本都在沿用 Greasymonkey 的一些基本规范,这些脚本也就统称为「油猴脚本」了。
你可以将油猴脚本理解为一种可以根据我们的实际需求,为网页「加料」的手段。
<aside> 💡 https://search.arc.net/68USIHuMBTl49i6MV2AG
同样一个需求,如果浏览器扩展和油猴脚本都能实现,我们应该如何选择?
一方面,浏览器扩展相比用户脚本诞生的时间其实更晚,各家的浏览器扩展后发制人,的确也有了比油猴脚本强得多的功能实现;
但另一方面,虽然脚本能力有限,但是它们占用的系统资源和内存又更少一点。
另外,从安全性角度上来说,油猴脚本虽然也爆出过不少窃取个人信息、替换返利链接甚至挖矿的负面新闻,但油猴脚本的源代码审查相比浏览器扩展更为直接透明,选择合适的油猴脚本获取渠道、留意脚本的权限请求,有基础的用户也可以多多留意、检查脚本内容,一般就能规避大部分风险。
因此我自己的解决方案是,对于轻量一些的场景,通过用户脚本+用户样式(user style)解决大部分浏览需求,重一些的场景则会选择浏览器扩展。
当然了,如果你的设备对保密性和安全等级有着较高的要求,我还是不建议你安装任何第三方油猴脚本。
如果要用严谨一点的定义来说,油猴脚本其实是一种注入式的 JavaScript 程序,在网页本身的程序之外,通过一些手段,将用户需要的数据和逻辑注入到当前的网页中,达到修改界面、增加功能等等的目的。
换句话说油猴脚本也是 JavaScript。JavaScript 能实现的能力,油猴脚本基本也能做,比如操作页面元素,可以给页面中增加、删减、修改页面元素,最常见的去广告脚本就是这么实现的。
不过油猴脚本能提供一些普通 JavaScript 实现不了的能力。Greasymonkey 在最早的 0.25 版本中就带来了两个基本的功能:
GM_xmlhttpRequest:用于发起跨域请求
为了安全起见,浏览器在页面加载的时候会有一个同源策略,如果页面中的 javaScript 来自另一个域名,浏览器就会认为这个不安全不让其加载运行,但有的时候用户可能会有一些别的需求。
举个例子:比如说在京东或者当当上买书的时候,想看一下豆瓣上用户的评分,这种情况下就需要用到油猴脚本的这个能力了。在京东的页面中,我们就可以借助油猴脚本调用这个
GM_xmlhttpRequest
的 API 去访问豆瓣平台的查询接口。
GM_registerMenuCommand:当用户操作菜单时,触发一个行为
很多情况下,油猴脚本不需要自动执行,而是需要使用者来手动运行,这时就需要
GM_registerMenuCommand
了,在点击之后,触发一个写好的函数,就可以完成改变页面数据,或者发起某些请求的情况。举个例子:我在页面中看到一个不认识的单词,想要查询一下,这时候选中这个单词,然后触发这个接口,就可以实现查询的效果(当然也有很多的别的能力可以实现划词查询)。
<aside> 💡
除了这两个功能之外,目前的油猴脚本,大多采用了 Greasemonkey 制定的 V4 API 规范。通过这个规范,我们就能知道用户脚本可以做什么了。
</aside>
绝大部分情况下我都推荐 Tampermonkey。
另外,https://github.com/scriptscat/scriptcat 脚本猫,一个国产开源可以执行用户脚本的浏览器扩展。
万物皆可脚本化,让你的浏览器可以做更多的事情!