2017-09-10 8 views
0

stackoverflow.com의 사이드 바에서 가장 먼저 좋아하는 링크를 클릭하려고합니다.페이지가 Greasemonkey 스크립트로 끝없이 상쾌하게 유지됩니다.

이 스크립트를 발견했지만 문제는 페이지가 계속해서 상쾌하게 유지된다는 것입니다.

이 동작을 멈출 방법이 있습니까?

// ==UserScript== 
// @name  _ChromeC 
// @include *//stackoverflow.com/* 
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/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 major design 
    change introduced in GM 1.0. 
    It restores the sandbox. 
*/ 

waitForKeyElements ("#interestingTags a", actionFunction); 

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

제거 스크립트 처음 후에? – melpomene

+0

무엇을 의미합니까? – Floppy88

+0

불명확 한 점은 무엇입니까? – melpomene

답변

2

문제는 당신이 "이 버튼을 클릭"하면, 그것은 그 버튼 ...을 클릭하고주기가 지속적으로 반복하는, 다시 실행하기 위해 userscript을 일으키는 새로운 페이지를로드하는 원인이다.
는 (. 스크립트는 단지 지속적으로 재발지고 인해 waitForKeyElements의 성격, 한 번만 클릭 않는 각 스크립트 인스턴스 에 그 참고.)

그래서, 분명히 당신은 정말 버튼을 매번 클릭하고 싶지 않다.
질문은 "은 어떻게하고 어떤 것들을 혼자 떠날에서 버튼을 클릭하는 페이지가로드 결정합니까?"

이 그럼 당신은 지속적 로직 추가 할 필요가 - 페이지 (재) 부하를 살아 - 그 구별을 만들기 위해 스크립트에.

마지막으로 말하면 10 초 이내에 클릭하면 다시 클릭하고 싶지 않다고 가정하는 것이 일반적인 방법입니다.
다음은 그 논리는 그리스 몽키 스크립트에서 어떻게 표시되는지를 보여줍니다 :

// ==UserScript== 
// @name  _ChromeC 
// @match *://stackoverflow.com/* 
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_setValue 
// @grant GM_getValue 
// ==/UserScript== 

const delayBetweenClicks = 10000; //-- 10000 = 10 seconds 
var oldUnixTime   = parseInt (GM_getValue ("Last_redirect", "0"), 10); 
console.log ("oldUnixTime: ", oldUnixTime); 

waitForKeyElements ("#interestingTags a", clickOnlyOccassionally); 

function clickOnlyOccassionally (jNode) { 
    var currentTime = (new Date()).getTime(); 

    // Only click if we haven't done so in a while... 
    if ((currentTime - oldUnixTime) > delayBetweenClicks) { 
     GM_setValue ("Last_redirect", `${currentTime}`); // Must store as string. 

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