需求

从页面A获取到数据,但是在跳转到页面B后数据则消失。所以希望能够跨标签共享变量。

思路

使用GM_setValueGM_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: https://wiki.greasespot.net/GM_setValue

使用

首先在脚本开头加上这两行

// @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 - 大象笔记