2012-12-16 3 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의 오류 콘솔 (CtrlShift)을 사용하십시오. jslint을 사용하여 코드를 확인하는 것도 도움이 될 수 있습니다.

어쨌든 이것은 일반적인 그리스 몽키 문제입니다. 해당 단추의 지연된 모양을 처리하려면 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 "contains"selector] (http://www.jqapi.com/#p=attribute-contains-selector)입니다. 따라서, 'Click Me Now'가 ** 정확한 ** 일 때만 작동합니다. 업데이트 된 코드를 사용해보십시오. 제대로 작동하지 않는다면 id가 btn_submit 인 요소의 편집되지 않은 HTML을 게시하십시오. –

+0

업데이트 된 코드가 완벽하게 작동했습니다. 감사합니다! – crippplertd

관련 문제