0

vBulletinの無視セクションにある無視されたユーザーのリストにあるユーザーの名前を読み取る Greasemonkey スクリプトをhref更新しています。

値を配列に保存してdisplay:noneからtd、無視されたユーザーのスレッドをメッセージ ボードから非表示にします。

これを行う唯一の方法は、無視リストにアクセスして、配列値を に保存することです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_getValueまた、GM_setValueメタデータ ブロックに含まれていることも確認してください。

  3. コードを無名関数 EG でラップしても意味がありません。

    (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 に答える