gpt4 book ai didi

javascript - 这个tampermonkey代码有什么错误?

转载 作者:行者123 更新时间:2023-12-03 10:49:44 30 4
gpt4 key购买 nike

我的目标是去http://quizlet.com/12039115/scatter并在 2 秒内获得分数。我的计划是通过使用 setInterval/clearInterval 禁用计时器来实现此目的。我从某个网站上取下了一些代码,并尝试根据我的目的进行调整;它失败了。现在我需要知道出了什么问题。原始代码可以在blog.jazzychad.net/2011/03/20/inspect-javascript-timers-greasemonkey.html找到。当我将其加载到 Tampermonkey 并在页面上运行时,仅打印出 setInterval(多次):

INSPECT_TIMERS: setInterval - 100ms
quizlib.2X5g7.js:340
INSPECT_TIMERS: function (){return c.apply(b,a||arguments)}

因此,我可以看到它找到了计时器 ID。现在我需要clearInterval()。这就是出问题的地方。

给出上面输出的代码:

var go = function(window){

var oldSetInterval = window.setInterval;
var newSetInterval = function(f,t) {
__log("INSPECT_TIMERS: setInterval - " + t + "ms");
__log("INSPECT_TIMERS: " + f);
var id = oldSetInterval(f,t);
return id;
};
window.setInterval = newSetInterval;
//setTimeoutDeleted
function __log(msg) {
if (window.console && window.console.log) {
window.console.log(msg);
}
}
};

var script = document.createElement('script');
script.setAttribute("type", "application/javascript");
script.textContent = '(' + go + ')(window);';
document.body.appendChild(script); // run the script

当我添加时

clearInterval(id);

紧接之前

return id;    

该页面实际上无法响应启动“游戏”的点击。我这样做是错误的吗?我是否需要某种延迟,或者我是否错过了大局?

最佳答案

你的问题是,有多个 setInterval 调用,在我这边看起来像 3 个。

如果您在单击“开始游戏”之前在控制台中运行此代码,它将记录以下对 setInterval 的调用。

var originalSetInterval = window.setInterval;
window.setInterval = function(func, intr) {
var id = originalSetInterval.apply(window, arguments);
console.log('----setInterval----');
console.log('function:', func);
console.log('interval:', intr);
console.log('id:', id);
console.log('-------------------');
return id;
};

然后,当您单击“开始游戏”时,您将得到如下输出。

----setInterval----
function: function()
interval: 17
id: 10
-------------------
----setInterval----
function: function()
interval: 17
id: 12
-------------------
----setInterval----
function: function()
interval: 100
id: 13
-------------------

请随意停止阅读此处,并在继续阅读之前自行进行一些实验。

您可能不想对所有这些调用 clearInterval。运行时钟的时钟似乎是间隔 100 的时钟。要禁用该间隔而不触及其他间隔,您可以使用简单的 if 语句。

var originalSetInterval = window.setInterval;
window.setInterval = function(func, intr) {
var id = originalSetInterval.apply(window, arguments);
console.log('----setInterval----');
console.log('function:', func);
console.log('interval:', intr);
console.log('id:', id);
console.log('-------------------');
if (intr === 100) {
clearInterval(id);
}
return id;
};

这样做将成功停止时钟。然而,一旦你完成游戏你会发现游戏仍然会知道你花了多长时间。时钟只是一个视觉元素。

如果您想在游戏中作弊,您需要定位实际计算您最终得分的代码。听起来是一个学习如何使用浏览器开发工具的好机会,尤其是 JavaScript 调试器(使用 pretty-print 功能使缩小的 JS 更易于阅读)。

关于javascript - 这个tampermonkey代码有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459258/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com