油猴实现 全局变量 跨标签页共享变量 的方法
需求
从页面A获取到数据,但是在跳转到页面B后数据则消失。所以希望能够跨标签共享变量。
思路
使用GM_setValue
和GM_getValue
来实现。
介绍
官方定义:
GM_setValue(name, value)
Set the value of 'name' to the storage.
GM_getValue(name, defaultValue)
Get the value of 'name' from storage.
详细wiki: GM.setValue - GreaseSpot Wiki
使用
首先在脚本开头加上这两行
// @grant GM_setValue
// @grant GM_getValue
之后看个例子
(function() {
'use strict';
// Your code here...
var a = {
'name': '兔子昂'
};
GM_setValue('zw_test', a);
console.log(GM_getValue('zw_test'));
console.log(GM_getValue('zw_test').name);
})();
Chrome 的 console 输出
{name: "兔子昂"}
兔子昂
说明可以方便的将对象存储,并读取,非常方便。
扩展
GM_setValue 将数据存储在哪里?
存储在 Chrome 内置的 LevelDB 中。
多个 Chrome 同时开启是否会导致 GM_setValue 对同一个 key 相互覆盖?
在 Chrome A 实例下 set value A, 然后在 Chrome B 实例下 get value A。
会发现 Chrome B 读出来的结果是 undefined。
可以放心使用了。
参考:
Tampermonkey 数据存储之 GM_setValue / GM_getValue - Tampermonkey - 大象笔记