油猴脚本编写教程详解

作者:techstay 时间:2023-05-26 12:29:51 

油猴脚本(Tampermonkey)是一个非常流行的浏览器扩展,它可以运行由广大社区编写的扩展脚本,来实现各式各样的功能,常见的去广告、修改样式文件、甚至是下载视频。今天我们就来看看如何编写自己的油猴脚本。当然为了运行油猴脚本,你应该在浏览器中安装油猴插件。

安装油猴插件

安装油猴插件非常简单,直接在浏览器的扩展商店中安装即可。国产浏览器的话一般可以通过下载扩展文件手动拖动的方式来安装。下图是微软新版Edge浏览器的扩展商店,直接搜索Tampermonkey即可。

油猴脚本编写教程详解

也可以点击这里下载油猴插件

新建脚本

也可以点击这里获取已经写好的油猴脚本

首先在浏览器右上角找到并点击油猴插件,选择添加新脚本。

油猴脚本编写教程详解

然后就会打开如图所示的编辑器窗口,我们就可以在其中编辑自己的脚本文件了。如果你喜欢的话,还可以将脚本内容复制到合适的编辑器中编辑,完成之后再复制回来。

油猴脚本编写教程详解

如果你点击开发者菜单的话,可以选择ES6模板,然后就可以在脚本中使用新版JavaScript的特性了,它会有Babel转译回ES5。不过这个模板貌似有点问题,用了它就没办法使用代码纠错功能了。所以这里我还是选择了默认的ES5模板。

脚本编写方法

功能注释

首先来看看脚本的内容,上面是一大排注释,这些注释可以非常有用的,它表明了脚本的各个属性。下面来简单介绍一下。


属性名作用
name油猴脚本的名字
namespace命名空间,类似于Java的包名,用来区分相同名称的脚本,一般写成作者名字或者网址就可以了
version脚本版本,油猴脚本的更新会读取这个版本号
description描述,用来告诉用户这个脚本是干什么用的
author作者名字
match只有匹配的网址才会执行对应的脚本,例如 * 、 http://* 、 http://www.baidu.com/*等,参见 谷歌开发者文档
grant指定脚本运行所需权限,如果脚本拥有相应的权限,就可以调用油猴扩展提供的API与浏览器进行交互。如果设置为 none 的话,则不使用沙箱环境,脚本会直接运行在网页的环境中,这时候无法使用大部分油猴扩展的API。如果不指定的话,油猴会默认添加几个最常用的API
require如果脚本依赖其他js库的话,可以使用require指令,在运行脚本之前先加载其他库,常见用法是加载jquery
connect当用户使用 GM_xmlhttpRequest 请求远程数据的时候,需要使用connect指定允许访问的域名,支持域名、子域名、IP地址以及 * 通配符
updateURL脚本更新网址,当油猴扩展检查更新的时候,会尝试从这个网址下载脚本,然后比对版本号确认是否更新

脚本权限

下面简单介绍一下grant指令那里可以填写的一些权限,详情请查看 油猴脚本文档 。这里就简单介绍几个常用的,可以调用的函数全部以GM_作为开头。


权限名功能
unsafeWindow允许脚本可以完整访问原始页面,包括原始页面的脚本和变量。
GM_getValue(name,defaultValue)从油猴扩展的存储中访问数据。可以设置默认值,在没成功获取到数据的时候当做初始值。如果保存的是日期等类型的话,取出来的数据会变成文本,需要自己转换一下。
GM_setValue(name,value)将数据保存到存储中
GM_xmlhttpRequest(details)异步访问网页数据的API,这个方法比较复杂,有大量参数和回调,详情请参考官方文档。
GM_setClipboard(data, info)将数据复制到剪贴板中,第一个参数是要复制的数据,第二个参数是MIME类型,用于指定复制的数据类型。
GM_log(message)将日志打印到控制台中,可以使用F12开发者工具查看。
GM_addStyle(css)像网页中添加自己的样式表。
GM_notification(details, ondone), GM_notification(text, title, image, onclick)设置网页通知,请参考文档获取用法。
GM_openInTab(url, loadInBackground)在浏览器中打开网页,可以设置是否在后台打开等几个选项

还有一些API没有介绍,请大家直接查看官方文档吧。

编写脚本

编写脚本就很简单了,编写到 // Your code here .. 那里即可。可以编写函数,然后在最后调用这几个函数,这样的模块化编写方法写出来的脚本比较容易维护。

等vagrant更新时候提醒我的脚本

前段时间了解了vagrant这个东西,感觉很有意思,准备研究一下,但是照着官网教程运行的时候,第一步就发生了错误。我上网一搜,原来我更新的virtualbox比较新,vagrant恰好不支持。但是如今几个月过去了,vagrant还是没有更新,所以我要写一个脚本,等到vagrant更新的时候,给我网页上弹出一个对话框。

首先访问 vagrant官网 ,然后就可以看到中间下载按钮上大大的版本号2.2.6了。因为版本肯定是不会倒退的,所以只要判断一下版本号不是2.2.6,就可以弹出提示了。通过F12开发者工具可以看到,这三个按钮其实都是链接,只不过显示成了按钮的样子,而且他们恰好都位于 header 标签之中。如果如果可以的话,直接用选择器就可以非常轻松的获取到版本号。

油猴脚本编写教程详解

为了能在更新的时候及时获取到提示,我需要脚本在所有网站上生效,来检测版本。但是这样做会导致另外一个问题,那就是每次打开一个网页都会运行一次检查vagrant的脚本,而这是完全不必要的。所以需要一个额外的判断,这就需要利用油猴提供的API来保存当前日期,只有每天第一次的时候才会执行检查代码。本来我想的很复杂,需要一个日期变量,然后还要额外一个变量保存是否是今天第一次更新。后来我发现我想的太多了,做法其实很简单。每天先获取一次日期,然后和事先保存的日期比较,如果不一样的话才执行脚本,并将日期设置为今天的日期;如果日期一样的话无事发生。

最后一个问题就是如何来判断版本号,有两种方法:第一种就是上面提到的,直接解析HTML代码并找到版本号;第二种是更直接的办法, 因为vagrant也是Github上开源的项目,所以可以直接调用Github的API来获取最新发布的版本号。可惜的是,第二种办法我试了一下居然不成功,不知为何,没办法获取到发布信息,但是换成其他项目就可以。所以最后没办法只好采用第一种办法。有兴趣的同学可以自己试一下第二种方法。

来源:https://segmentfault.com/a/1190000021654926

标签:油猴,脚本
0
投稿

猜你喜欢

  • django admin 自定义替换change页面模板的方法

    2022-01-15 11:19:30
  • 如何安装绿色版MySQL Community Server 5.7.16并实现远程登录

    2024-01-14 13:02:03
  • Python实现网络聊天室的示例代码(支持多人聊天与私聊)

    2022-11-21 15:17:23
  • python利用socket实现udp文件传输功能

    2023-07-07 14:15:33
  • js实现九宫格布局效果

    2024-04-19 11:03:42
  • js实现带积分弹球小游戏

    2024-04-10 16:19:15
  • Python上下文管理器详细使用教程

    2021-06-24 05:47:35
  • python 如何把classification_report输出到csv文件

    2023-01-31 21:02:02
  • 使用numpy对数组求平均时如何忽略nan值

    2023-09-19 20:37:24
  • SQL SERVER如何判断某个字段包含大写字母

    2023-07-01 21:19:12
  • 使用python实现简单五子棋游戏

    2022-09-22 04:16:35
  • C#实现的ACCESS数据库操作类完整实例

    2024-01-20 02:57:36
  • removeChild的障眼法

    2009-12-04 12:49:00
  • 如何在Python中妥善使用进度条详解

    2022-05-30 12:10:05
  • Vue Router根据后台数据加载不同的组件实现

    2023-07-02 16:59:14
  • Matlab如何实现矩阵复制扩充

    2023-10-13 15:46:52
  • SQL Server导入导出数据方法

    2007-08-17 09:50:00
  • Mysql 存储过程中使用游标循环读取临时表

    2024-01-28 00:55:20
  • 使用python-pptx包批量修改ppt格式的实现

    2021-04-03 21:31:16
  • python实现定时播放mp3

    2022-01-29 22:25:21
  • asp之家 网络编程 m.aspxhome.com