用于单击链接的Greasemonkey Jquery脚本

时间:2011-06-24 11:03:09

标签: jquery greasemonkey

我正在尝试制作我的第一个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/

现在,只会弹出hello world警告,但不会点击链接。因此间隔函数正在工作,但是加载更多注释不是。不知道从哪里开始。 “加载更多评论”字符串中的空格是否会破坏它?

任何帮助非常感谢。谢谢!

3 个答案:

答案 0 :(得分:3)

请参阅:wiki.greasespot.net/Generate_Click_Events

Reddit链接触发JavaScript而不是使用jQuery设置的JS。

这意味着在这种情况下,您需要发送一个实际的鼠标事件,如下所示:

setInterval ( function () {

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

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

糟糕!我没有看到提到的问题点击“所有的'加载更多评论'”。 (那个页面有数百个!)

为此,请使用jQuery的each()函数...

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);

答案 1 :(得分:0)

您正在尝试模拟点击事件,但这仅适用于使用jQuery附加的事件。使用html属性附加的reddit 加载更多评论链接上的事件。即:

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

要解决您的问题,您需要从此属性中提取值并单独调用它们。

答案 2 :(得分:0)

如果您在页面上加载了jQuery,则只需使用jQuery trigger点击事件