页面使用Greasemonkey脚本不断刷新
我正在尝试单击stackoverflow.com侧栏中的第一个最喜欢的链接 我找到了这个脚本,但问题是页面不断刷新 有没有办法阻止这种行为页面使用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.
// ==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的意思是脚本不应该一直点击链接。。。