2017-09-10 3 views
0

J'essaie de cliquer sur le premier lien favori dans la barre latérale de stackoverflow.com.La page ne cesse de rafraîchir avec le script Greasemonkey

J'ai trouvé ce script, mais le problème est que la page continue de rafraîchir sans cesse.

Y at-il un moyen d'arrêter ce comportement?

// ==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

Désinstaller le script après la première fois? – melpomene

+0

Que voulez-vous dire? – Floppy88

+0

Qu'est-ce qui n'est pas clair? – melpomene

Répondre

2

Le problème est que lorsque vous « cliquez sur ce bouton », il provoque une nouvelle page à charger, ce qui provoque l'userscript à courir, qui clique sur ce bouton ... Et le cycle se répète sans cesse.
(Notez qu'en raison de la nature de waitForKeyElements, chaque instance de script ne que cliquez une fois. Le script est juste de relancée en permanence.)

Alors, évidemment vous ne voulez pas vraiment de cliquer sur ce bouton à chaque fois.
La question est: « Comment déterminez-vous quelle page-charges de cliquer sur le bouton et ceux qui à laisser seuls? »

Ensuite, vous devez ajouter une logique persistante - qui survit à la page (re) charge - à votre script pour faire cette distinction.

Une façon grossière est de supposer que si vous avez cliqué dans les 10 dernières secondes, que vous ne voulez pas cliquer à nouveau.
Voici ce que cette logique ressemble dans un script Greasemonkey:

// ==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); 
    } 
}