2011-06-24 126 views
2

我想要做我的第一個greasemonkey腳本。我對jQuery和JavaScript相當陌生,所以對我來說很簡單。Greasemonkey jquery腳本點擊鏈接

這是我到目前爲止。

// ==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頁面上的所有「加載更多評論」頁面,並每10秒循環一次。

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

眼下,只有世界你好警報彈出,但鏈接不會點擊。所以間隔函數正在工作,但加載更多的評論不是。不知道該從哪裏出發。 「加載更多評論」字符串中的空格是否可以打破它?

任何幫助非常感謝。謝謝!

回答

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

謝謝。它似乎一次只做一個「加載更多」鏈接,是[0] .dispatchEvent意味着什麼? – some1

+0

Mozilla DOM事件是什麼?你可以將它們混合成jQuery? – some1

+0

部分。 '[0]'也用於從jNode切換回HTML元素 - 這是'dispatchEvent()'所必需的。 ...我沒有使用Reddit,也沒有意識到會有多個這樣的鏈接(該網頁目前有155個!!!),或者您想要一次點擊多個鏈接。 (但是我看到那是你的問題,看到我的更新後的答案......我們沒有將Mozilla事件混合到jQuery中,我們只是使用jQuery來使節點選擇和操作更容易jQuery旨在做出這樣的事情更簡單 –

0

您試圖模擬點擊事件,但這隻適用於jQuery附帶的事件。 上的活動加載更多評論使用html屬性附加在reddit上的鏈接。即:

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

要解決您的問題,您需要從此屬性中提取值並分別調用它們。

0

如果您的jQuery加載你可以只trigger單擊事件使用jQuery

在頁面上
+0

不,因爲點擊處理程序未使用jQuery設置「。使用.bind()或其某個快捷方法**附加的事件處理程序**被觸發」 –