在会话之间存储持久列表? [英] Store a persistent list between sessions?

查看:36
本文介绍了在会话之间存储持久列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想编写一个允许我自定义站点的脚本.为此,我需要有一个持久字典.Tampermonkey 可以做到这一点吗?

I would like to write a script that allows me to customize a site. To do this I need to have a persistent dictionary. Is this possible with Tampermonkey?

EG:

persist var mylist = {}; // loads mylist from the HD/cache if it exists, else create a new one.

推荐答案

另见 如何/在何处存储数据Chrome Tampermonkey 脚本?".

为此,请使用 GM_getValueGM_setValue 和 JSON 编码.EG:

For this, use GM_getValue, GM_setValue, and JSON encoding. EG:

var myList = JSON.parse (GM_getValue ("myListArray",  null) )  ||  {};

GM_setValue ("myListArray",  JSON.stringify (myList) );


这是一个完整的工作脚本,演示了获取、更改和存储关联数组:


Here's a complete working script that demonstrates fetching, changing, and storing an associative array:

// ==UserScript==
// @name     _Persist a list between sessions
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @include  https://stackoverflow.com/questions/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    GM_getValue
// @grant    GM_setValue
// ==/UserScript==

var myList      = {};
var myListObj   = GM_getValue ("myListArray",  "");
if (myListObj) {
    myList      = JSON.parse (myListObj);
}

//-- DEBUG: List items to console.
console.log ("There are ", Object.keys (myList).length, " items in the list.");
for (var myItem in myList) {
    if (myList.hasOwnProperty  &&  myList.hasOwnProperty (myItem) ) {
        console.log (myItem + ": ", myList[myItem]);
    }
}

//-- Demo buttons showing how to change the list and store the new value(s).
$("body").prepend (
      '<div id="gmDemoCntrls">'
    +    '<button data-type="add">Add Item</button>'
    +    '<button data-type="del">Delete Item</button>'
    +    '<button data-type="sav">Save list</button>'
    + '</div>'
);

$("#gmDemoCntrls button").click ( function (zEvent) {
    var numItems    = Object.keys (myList).length;

    switch ( $(zEvent.target).data ("type") ) {
        case "add":
            var newKey      = "autoname_" + (numItems + 1);
            var newVal      = new Date().toString ();
            myList[newKey]  = newVal;
            console.log ("Added ", newKey, " = ", newVal);
            break;

        case "del":
            if (numItems) {
                var oldKey      = Object.keys (myList)[numItems - 1];
                delete myList[oldKey];
                console.log ("Deleted ", oldKey);
            }
            else
                console.log ("No items left!");
            break;

        case "sav":
            GM_setValue ("myListArray",  JSON.stringify (myList) );
            console.log ("Saved the list of ", numItems, " items.");
            break;

        default:
            alert ("Oops! script error with button handling!");
            break;
    }
} );

这篇关于在会话之间存储持久列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆