2017-09-10 6 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秒以内にクリックした場合は、もう一度クリックしたくないと仮定するのが一番の方法です。
ここでは、そのロジックは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); 
    } 
} 
関連する問題