使用 Greasemonkey 脚本不断刷新页面

Page keeps refreshing endlessly with Greasemonkey script

我正在尝试单击 whosebug.com 侧边栏中的第一个收藏夹 link。

我找到了这个脚本,但是问题是页面不断刷新。

有没有办法阻止这种行为?

// ==UserScript==
// @name     _ChromeC
// @include  *//whosebug.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);
}

问题是,当您 "click that button" 时,它会导致加载新页面,这会导致用户脚本再次 运行,从而单击该按钮...循环不断重复。
(请注意,由于 waitForKeyElements 的性质,每个脚本实例 确实 仅单击一次。脚本只是不断重新启动。)

所以,显然您并不是真的想每次都单击该按钮。
问题是:“您如何确定要单击哪些页面加载按钮以及哪些页面要单独加载?

然后您需要向您的脚本添加持久性逻辑——在页面(重新)加载后仍然存在——以进行区分。

一种粗略的方法是假设如果您在最后一次点击,比如 10 秒内,您不想再次点击。
这是 Greasemonkey 脚本中的逻辑:

// ==UserScript==
// @name     _ChromeC
// @match    *://whosebug.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);
    }
}