Как я могу улучшить свой сценарий Greasemonkey 'ignore-list'? - PullRequest
2 голосов
/ 20 декабря 2011

Я клонировал существующий скрипт 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 Ответ

1 голос
/ 20 декабря 2011

Во-первых, сценарий предполагает, что 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';
    }
}

Вы можете оптимизировать в зависимости от ваших конкретных потребностей, но, похоже, это решает проблему. В общем, я бы порекомендовал строить свое выражение понемногу. Пишите в консоль между каждым новым шагом, чтобы вы знали, что он выбирает то, что вы хотите.

...