2012-12-16 63 views
2

我見過很多類似的問題,並且我嘗試了所有我能想到的方法來實現這一點。如何讓Greasemonkey點擊一個只出現延遲的按鈕?

首先相關的代碼(¿從目標頁面):

document.getElementById('btn_submit').innerHTML = 
'<input type="hidden" value="17271" name="idofclick"> 
    <input type="submit" value=" Click Me Now! " name="submit_com" class="padding2">'; 

基本上沒有頁面和一個計時器「點擊我吧!」按鈕在3秒後出現,這是我想要點擊的部分。

這是我的代碼。它不工作:

// ==UserScript== 
// @name  abc 
// @namespace something 
// @description abc Scripty 
// @include  * 
// @version  1 
// ==/UserScript== 
(function ClicktheButton(obj) { 
    var evt = document.createEvent("MouseEvents"); 
    evt.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    var canceled = !obj.dispatchEvent(evt); 
    /* 

    if(canceled) { 
    // A handler called preventDefault 
    alert("canceled"); 
    } else { 
    // None of the handlers called preventDefault 
    alert("not canceled"); 
    } 
    */ 
} 

var StupidButton = document.querySelector.innerHTML('input[type="submit"][value=" Click Me Now! "]'); 
ClicktheButton(StupidButton); 

回答

4

該代碼有錯誤。使用Firefox的錯誤控制檯(CtrlShiftJ)看到它們。使用jslint來檢查你的代碼,也可以有幫助。

無論如何,這是一個常見的Greasemonkey問題。使用the waitForKeyElements() utility來處理該按鈕的延遲外觀。使用jQuery來簡化代碼(並使其更加健壯和便攜)。

所以,你的腳本將變成:

// ==UserScript== 
// @name  _YOUR_NAME 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 

function clickSubmitBtnWhenItAppears (jNode) { 
    var clickEvent = document.createEvent ('MouseEvents'); 
    clickEvent.initEvent ('click', true, true); 
    jNode[0].dispatchEvent (clickEvent); 
} 

//-- Value match is case-sensitive 
waitForKeyElements (
    //"#btn_submit input[type='submit'][value*='Click Me Now']", 
    "input[type='submit'][value*='Click Me Now']", 
    clickSubmitBtnWhenItAppears 
); 
+0

嗯似乎並不奏效要麼是因爲有'之間的空間,並點擊我吧! '? – crippplertd

+0

不,那不是。 'value * ='操作符是[a]包含「選擇器」(http://www.jqapi.com/#p=attribute-contains-selector)。所以,只要'Click Me Now'是**確切的**,那麼它就會起作用。嘗試更新後的代碼,如果這樣做不起作用,請發佈ID爲'btn_submit'的元素的未經編輯的HTML。 –

+0

更新的代碼工作完美:)謝謝! – crippplertd