页面使用Greasemonkey脚本不断刷新

页面使用Greasemonkey脚本不断刷新,greasemonkey,Greasemonkey,我正在尝试单击stackoverflow.com侧栏中的第一个最喜欢的链接 我找到了这个脚本,但问题是页面不断刷新 有没有办法阻止这种行为 // ==UserScript== // @name _ChromeC // @include *//stackoverflow.com/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js // @require https://gist.

我正在尝试单击stackoverflow.com侧栏中的第一个最喜欢的链接

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

有没有办法阻止这种行为

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

问题是,当您“单击该按钮”时,它会导致加载一个新页面,从而导致userscript再次运行,从而单击该按钮。。。循环不断重复。
(请注意,由于
waitforkyellements
的性质,每个脚本实例只单击一次。脚本只是不断地重新启动。)

因此,很明显,您并不想每次都单击该按钮。
问题是:“您如何确定要单击按钮加载哪些页面,以及不要点击哪些页面?

然后,您需要向脚本中添加持久性逻辑(在页面(重新)加载后仍然有效)以实现这一区别

一种粗略的方法是假设,如果您在最后(比如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);
    }
}

问题是,当您“单击该按钮”时,它会导致加载一个新页面,从而导致userscript再次运行,从而单击该按钮。。。循环不断重复。
(请注意,由于
waitforkyellements
的性质,每个脚本实例只单击一次。脚本只是不断地重新启动。)

因此,很明显,您并不想每次都单击该按钮。
问题是:“您如何确定要单击按钮加载哪些页面,以及不要点击哪些页面?

然后,您需要向脚本中添加持久性逻辑(在页面(重新)加载后仍然有效)以实现这一区别

一种粗略的方法是假设,如果您在最后(比如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);
    }
}

第一次后卸载脚本?你是什么意思?什么不清楚?你说的“卸载脚本”是什么意思?我是否应该在每次访问stackoverlow时卸载并重新安装它?XDI的意思是脚本不应该一直点击链接…在第一次之后卸载脚本?你是什么意思?什么不清楚?你说的“卸载脚本”是什么意思?我是否应该在每次访问stackoverlow时卸载并重新安装它?XDI的意思是脚本不应该一直点击链接。。。