使用 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);
}
}
我正在尝试单击 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);
}
}