如何改进我的'忽略列表'Greasemonkey脚本?

时间:2011-12-20 04:22:11

标签: javascript regex greasemonkey

我克隆了一个现有的GM脚本,该脚本据说会在Simple Machines论坛上点击用户,但它似乎不起作用 -

var smf_url = 'http://www.friendsoftom.com/forum/index.php';

var banned = new Array();
banned.push(4268); 

for (var i = 0; i < banned.length; i++){
    var uid = banned[i];
    var url = 'http://friendsoftom.com/forum/index.php?action=profile;u=' + uid;
    var expression = '//tr[td/table/tbody/tr/td/table/tbody/tr/td/b/a[@href = "' + url + '"]]';

    var nodes = document.evaluate(expression, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

    for (var j = 0; j < nodes.snapshotLength; j++) {
        var node = nodes.snapshotItem(j);
        node.style.display = 'none';
    }
}

http://userscripts.org/scripts/review/120908

如果要将其克隆以进行测试,可以测试此URI -

http://friendsoftom.com/forum/index.php/topic,8484.0.html

知道出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

首先,脚本假定action=profile将是第一个查询字符串参数,但不一定是这种情况。其次,你的整个表达并没有选择那么有用的东西。这应该让你开始:

var banned = new Array();
banned.push(4268); 

for (var i = 0; i < banned.length; i++) {
    var uid = banned[i];
    var expression = "id('forumposts')/form[1]/" + 
                "div[starts-with(@class, 'windowbg') " +
                "and descendant::a[contains(@href, 'u=" + uid + "')]]";
    var nodes = document.evaluate(expression, document, null, 
            XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var j = 0; j < nodes.snapshotLength; j++) {
        var node = nodes.snapshotItem(j);
        node.style.display = 'none';
    }
}

您可以根据您的具体需求进行优化,但这似乎可以解决问题。一般来说,我建议你一点一点地建立你的表达。在每个新位置步骤之间写入控制台,以便您知道它正在选择您想要的内容。