用于单击链接的Greasemonkey Jquery脚本

我正在尝试做我的第一个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页面上单击所有“加载更多注释”页面,并每隔十秒循环执行一次。

Why assign gender to public bathrooms, if there is only one toilet per restroom and the door locks? from AskReddit

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

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

请参阅: 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); 

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

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

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

如果您在页面上加载了jQuery,则可以使用jQuery 触发 click事件