2013-05-22 27 views
1

我想写一个脚本,允许我自定义一个网站。要做到这一点,我需要有一个持久的字典。 Tampermonkey可能吗?在会话之间存储持久性列表?

EG:

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

回答

2

还参见"How/Where to store data in a Chrome Tampermonkey script?"

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

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

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


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

// ==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; 
    } 
}); 
+0

感谢。我应该指出,授予对GM_getValue和GM_setValue的访问权限是至关重要的... – Archival