Скрипт Greasemonkey Jquery для перехода по ссылкам - PullRequest
2 голосов
/ 24 июня 2011

Я пытаюсь сделать мой первый скрипт greasemonkey. Я довольно новичок в jquery и javascript, так что будьте осторожны со мной.

Вот что у меня есть.

// ==UserScript==
// @name           load all page comments
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// @namespace      none
// @include        http://www.reddit.com/*
// ==/UserScript==

setInterval( function () {
  window.alert("Hello World!");
  $("a:contains('load more comments')").click();
}, 10000);

Цель здесь - щелкнуть по всей странице «загрузить дополнительные комментарии» на образце страницы reddit, подобной этой, и выполнить цикл каждые десять секунд.

http://www.reddit.com/r/AskReddit/comments/i7hb5/why_assign_gender_to_public_bathrooms_if_there_is/

В данный момент появляется только предупреждение о мире приветствия, но ссылки не нажимаются. Таким образом, функция интервала работает, а загрузка дополнительных комментариев - нет. Не уверен, куда идти отсюда. Могут ли пробелы в строке «загрузить больше комментариев» ее разбить?

Любая помощь с благодарностью. Спасибо!

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

См .: wiki.greasespot.net / Generate_Click_Events .

Эта ссылка Reddit запускает JavaScript, а не JS, который был установлен с помощью jQuery.

Что означает, что в этомВ этом случае вам необходимо отправить фактическое событие мыши, например, так:

setInterval ( function () {

    var clickEvent  = document.createEvent ("HTMLEvents");
    clickEvent.initEvent ("click", true, true);

    $("a:contains('load more comments')")[0].dispatchEvent (clickEvent);
}, 10000);

Упс!Я не видел, чтобы в вопросе упоминалось нажатие « all из« Загрузить больше комментариев »».(А на этой странице их сотни!)

Для этого используйте функцию each() jQuery ...

setInterval ( function () {

    var moreLinks       = $("a:contains('load more comments')");

    moreLinks.each ( function () {

        var clickEvent  = document.createEvent ("HTMLEvents");
        clickEvent.initEvent ("click", true, true);
        this.dispatchEvent (clickEvent);
    } );
}, 10000);
0 голосов
/ 24 июня 2011

Если на странице загружен jQuery, вы можете просто вызвать событие click, используя jQuery

0 голосов
/ 24 июня 2011

Вы пытаетесь смоделировать событие щелчка, но это работает только для событий, связанных с jQuery. События на загружают больше комментариев ссылки на reddit, прикрепленные с использованием атрибутов html. То есть:

onclick="return morechildren(this, 't3_i7hb5', 'c21ko21,c21kesz,c21klil,c21ko45,c21kro5,c21l90v,c21lo38', 3, '')"

Чтобы решить вашу проблему, вам нужно извлечь значения из этих атрибутов и вызвать их отдельно.

...