0

我正在更新一个 Greasemonkey 脚本,该脚本读取vBulletinhref的忽略部分中被忽略用户列表中的名称。

我将值存储在一个数组中,然后display:nonetd其隐藏在留言板上被忽略的用户线程。

这样做的唯一方法是访问忽略列表并将数组值存储在about:config. 但我无法让数组存储在那里。

这是更新脚本的相关部分:

// @grant          GM_setValue 
// ==/UserScript==

(function() {
    var allT; 
    var allR;
    var plonk = new Array(); 
    var ignore_threads_from = GM_setValue;

    var url = "http://www.site.com/forums/profile.php?do=ignorelist"; //use for iggy list URL
    var currentURL = window.location;

    if (url == currentURL) {
        var GM_setValue = $('#ignorelist.userlist li a').map(function() {
              return $(this).text();
        }).get();
    }
4

2 回答 2

7

您想将数组转换为字符串,JSON.stringify()这是最好的选择。

var a = [1, 2, 3];
GM_setValue("key", JSON.stringify(a));

var b = JSON.parse(GM_getValue("key"));

这是假设plonk不是一个元素数组——没有关于你在那里做什么的提示。

为什么要覆盖 GM_setValue?别管那个。

于 2012-09-21T21:27:52.017 回答
6

Jeremy J Starcher 的回答是正确的:

  1. 您不能以这种方式存储数组,使用GM_setValue().
  2. 问题代码GM_setValue()无论如何都使用不正确,并覆盖了函数!( var GM_setValue = ...)。

需要了解的其他事项:

  1. GM_setValue()GM_getValue()用除字符串以外的任何东西做糟糕的工作。但是,幸运的是,有几个实用程序可以纠正这些缺陷。一个很好的是Super_GM_setValue_and_GM_getValue.js

    要使用它,请将此行添加到脚本的元数据块中:

    // @require http://userscripts-mirror.org/scripts/source/107941.user.js
    


  2. 确保你也在你@grant GM_getValueGM_setValue元数据块中。

  3. 将代码包装在匿名函数中是没有意义的,例如:

    (function() {
        ...
    })();
    


  4. 使用window.location.href,不使用window.location


将它们放在一起,该代码片段将如下所示:

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require http://userscripts-mirror.org/scripts/source/107941.user.js
// @grant   GM_setValue 
// @grant   GM_getValue 
// ==/UserScript==

var allT; 
var allR;
var plonk               = new Array(); 
var ignore_threads_from = GM_SuperValue.get ("IgnoredUsers", []);

var url         = "http://www.example.com/forums/profile.php?do=ignorelist"; //use for iggy list URL
var currentURL  = window.location.href;

if (url == currentURL) {
    var ignoreList  = $('#ignorelist.userlist li a').map (function () {
          return $(this).text();
    } ).get ();

    GM_SuperValue.set ("IgnoredUsers", ignoreList);
}
于 2012-09-22T03:45:08.000 回答