循环不停止或不启动

时间:2016-07-21 22:21:20

标签: javascript userscripts

我正在为一个调查网站制作一个小用户。每当我点击调查并且表明我没有收到它时,脚本应该刷新一定次数试图声明调查直到它放弃。 (如果您不知道用户是什么,请将其视为在特定网站上始终保持运行的内容,以便您可以使用javascript选择器和内容控制事物)

这是我的脚本到目前为止(javascript部分就是问题所在):

var elementExists = document.getElementsByClassName("message warning")[0];


if(elementExists)
{
    var attempts = 0;
    while(attempts<5)
    {
        attempts += 1;
        location.reload();
        if(elementExists)
        {
            //nothing
        }
        else
        {
            window.stop();
        }

    }
    window.stop();
}

这实际上是我第一次使用Javascript,所以我认为这是错误的原因,但经过45分钟的调试后,我感到非常困惑。如果我删除最后一个“window.stop();”代码无限刷新网页。如果它停留在那里,那么代码甚至不会启动。如果“window.stop();”似乎几乎就像跳过了while循环一样。存在。这是Javascript的功能,还是其他地方的问题?

如果有人能引导我朝着正确的方向前进或帮我解决这个问题,我将非常感激!

(我还检查了选择器以查看是否存在问题,但我已正确完成)

更新:结果是location.reload();停止脚本,从而强制重新加载。由于我正在创建一个用户脚本,我意识到我可以使用Greasemonkey API(或者更像是偶然发现)。通过使用GM_setValue和GM_getValue,我能够解决此问题并且脚本成功重新加载了一定次数(取决于变量尝试)并在完成时停止。但是在稍微搞乱之后,然后将脚本恢复到旧版本,脚本就不会再执行了;由于某种原因,“反击&尝试”似乎是假的......有谁能找出原因?如果需要文档: https://wiki.greasespot.net/GM_getValue https://wiki.greasespot.net/GM_setValue

var tries = 5;
var elementExists = document.getElementsByClassName("message warning")[0];
var counter = GM_getValue('counter', 0);

if(elementExists && counter < tries)
{
    GM_setValue('counter', ++counter);
    location.reload();
}

(计数器和尝试似乎都是整数值..因此在比较它们时应该存在问题......)

同样正如@ yuriy636所建议的那样,我试图重置变量并创建类似这样的东西

var tries = 5;
var elementExists = document.getElementsByClassName("message warning")[0];
var counter1 = GM_getValue('counter1', 0);

if(elementExists && counter1 < tries)
{
    GM_setValue('counter1', ++counter1);
    location.reload();
}

if(elementExists && counter1 == tries)
{
    GM_deleteValue('counter1');
    window.close();
}

if(!!elementExists)
{
   GM_deleteValue('counter1');
    return;
    alert("stops script while hidden");
}

但我再次被无限循环击中.. RIP

更新2:不是RIP后解决方案:

var tries = 50;
var elementExists = document.getElementsByClassName("message warning")[0];
var counter = GM_getValue('counter', 0);

if(elementExists && counter < tries)
{
    GM_setValue("counter", counter + 1);
    location.reload();
}
else
{
 GM_deleteValue("counter");
}
if(elementExists && counter >= tries)
{
 window.close();
}

100%工作,在指示尝试次数后,如果错误仍然存​​在,页面将关闭

2 个答案:

答案 0 :(得分:1)

最可能的问题是你的while循环中有location.reload()。这会导致页面在循环中发生任何有趣的事情之前刷新。在这个特定的代码中,我希望页面看起来无限刷新,因为每次页面刷新时,它都会再次刷新。

答案 1 :(得分:0)

通常这看起来更像是:

var elements = document.getElementsByClassName("message warning");

for (var i = 0; i < elements.length; i++) {
  console.log (elements[i]);
}

.getElementsByClassName返回一个包含类message和/或warning的元素数组,您只捕获第一个[0]。希望有所帮助。