王一之 发表于 2021-2-8 14:59:01

[油猴脚本开发指南]右键菜单与GM_get/setValue函数

### 本节主要内容

> 介绍GM_get/setValue两个函数,油猴脚本的右键菜单能力.最后来一个菜单点击计次的脚本演示.

### GM_get/setValue

> ([https://www.tampermonkey.net/documentation.php#GM_setValue](https://www.tampermonkey.net/documentation.php#GM_setValue))

这两个函数可以使用KV键值对的方式存储数据,将数据保存在浏览器的储存中(tampermonkey插件是websql中),具体容量由扩展实现使用的存储介质所决定,不过一般来说肯定是够用的,不用太关注.

另外这个函数在Greasemonkey中是异步的,Tampermonkey是同步的,我们这里只针对Tampermonkey来讲解.注意:在两个不同的脚本中是无法共享数据的.

这个函数可以用来保存一些配置数据,像某些脚本的配置是写在脚本代码中的,更新脚本后配置又被还原,很不方便,这时就可以改造成get/setValue函数来储存下来.

#### 使用方法
> 方法非常简单,我们一笔带过.注意两个函数都要使用 `grant`去申请

```js
// ==UserScript==
// @name         New Userscript2
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/
// @grant      GM_setValue
// @grant      GM_getValue
// ==/UserScript==

GM_setValue("qqq",123);
console.log(GM_getValue("qqq"));
```

### 右键菜单

之前在说([https://www.tampermonkey.net/documentation.php#_run_at](https://www.tampermonkey.net/documentation.php#_run_at))的时候,有一个属性,不知道大家有没有注意,当时也没有详细讲解.除了 `document-start/body/end/idle`这些控制脚本运行时间的外,还有一个 `context-menu`的属性,用于右键点击菜单的时候执行脚本.如果你使用了 `context-menu`属性,那么当你在所匹配的页面上右键时,菜单中就会以你脚本名显示出一菜单项,点击之后就是执行你的脚本代码.

(文档的最后还提了一下 `#include`和 `#exclude`,这两个属性和 `#match`功能差不多,🤡实际上我也没用过这两,忽略好了)

!(data/attachment/forum/202102/08/145359cf8cmebm3ey8gck0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image-20210208134730012.png")

```js
// ==UserScript==
// @name         右键菜单和valude demo
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/*
// @run-at       context-menu
// ==/UserScript==

alert("菜单被点击了");
```

#### 自定义的菜单

除了使用 `@run-at       context-menu`生成菜单外,油猴还提供了两个函数([https://www.tampermonkey.net/documentation.php#GM_registerMenuCommand](https://www.tampermonkey.net/documentation.php#GM_registerMenuCommand))和([https://www.tampermonkey.net/documentation.php#GM_unregisterMenuCommand](https://www.tampermonkey.net/documentation.php#GM_unregisterMenuCommand)),分别用于注册菜单和删除菜单.更加灵活,但是不能显示在页面上,需要到油猴图标脚本那里去进行点击.

```js
// ==UserScript==
// @name         右键菜单和valude demo
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/*
// @grant    GM_registerMenuCommand
// @grant    GM_unregisterMenuCommand
// ==/UserScript==

let id=GM_registerMenuCommand ("自定义的菜单", function(){
   alert('菜单点击');
   GM_unregisterMenuCommand(id);//删除菜单
}, "h");
// 第三个参数 accessKey 为快捷键,输入h即可触发。本脚本在点击一次之后会将菜单删除。
```

### 菜单点击计数器

> 利用油猴的存储功能来保存菜单被点击的次数,然后刷新次数(纯属使用而使用...想不到什么实战的例子...)

```js
// ==UserScript==
// @name         右键菜单和valude demo
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://bbs.tampermonkey.net.cn/*
// @grant    GM_setValue
// @grant    GM_getValue
// @grant    GM_registerMenuCommand
// @grant    GM_unregisterMenuCommand
// ==/UserScript==

let id=GM_registerMenuCommand ("菜单第"+GM_getValue("click_num",0)+"点击",click, "h");

function click(){
   GM_unregisterMenuCommand(id);
   GM_setValue("click_num",GM_getValue("click_num",0)+1)
   id=GM_registerMenuCommand ("菜单第"+GM_getValue("click_num",0)+"点击",click, "h");
}
```

601tyl 发表于 2021-7-11 21:06:38

有没有其他详细学习油猴的资料{:4_110:}

李恒道 发表于 2021-7-11 23:19:56

601tyl 发表于 2021-7-11 21:06
有没有其他详细学习油猴的资料

论坛的油猴开发系列基本很满足了

wjy0 发表于 2021-7-12 21:42:04

想问如何管理GM数据库呢,比如我之前测试set了许多value,如何删除这些value呢。

王一之 发表于 2021-7-12 21:44:19

wjy0 发表于 2021-7-12 21:42
想问如何管理GM数据库呢,比如我之前测试set了许多value,如何删除这些value呢。 ...

GM_listValuesGM_deleteValueGM_addValueChangeListenerGM_removeValueChangeListener

之前忘记写这些了.....

wjy0 发表于 2021-7-12 21:55:28

王一之 发表于 2021-7-12 21:44
GM_listValuesGM_deleteValueGM_addValueChangeListenerGM_removeValueChangeListener

之前忘记写 ...

谢谢,ggnb!

xxhuiuna87 发表于 2021-10-1 21:08:28

论坛的油猴开发系列基本很满足了

xxhuiuna87 发表于 2021-10-1 21:11:43


有没有其他详细学习油猴的资料

Tmon20211013 发表于 2021-10-15 16:58:25

有一张图片崩了

王一之 发表于 2021-10-15 16:59:39

Tmon20211013 发表于 2021-10-15 16:58
有一张图片崩了

好像是演示图,问题不大
页: [1] 2
查看完整版本: [油猴脚本开发指南]右键菜单与GM_get/setValue函数