繁体   English   中英

setTimeout并刷新页面/选项卡而不会丢失井号

[英]setTimeout and refresh the page/tab without losing the hashtag

我是JavaScript新手,为自己写了一个脚本

  • 它在Chrome扩展程序中运行。
  • 我正在URL末尾打开带有#script的网站来启动脚本。
  • 该扩展名检查URL中的#script,然后执行脚本。
  • 在脚本的末尾有一个重新加载-重新加载页面时,脚本将再次运行(无限循环)>是的,这就是我想要的!

问题:实际脚本完成后,应该有5秒钟的超时时间才能重新加载页面。 脚本将忽略超时,并且重新加载后URL中的#标签将丢失。 循环停止,因为主题标签消失了。

我试过的

setTimeout(location.reload(true);}, 5000);



window.setTimeout(location.reload(true);}, 5000);



setTimeout(window.open("https://MyLink.com/#script","_self");}, 5000);

所有这些都以某种方式立即执行(不中断5秒),并在没有井号(甚至是最后一个井号)的情况下显示页面,从而导致循环停止。

content.js内的完整代码: (pastebin的附加内容: http//pastebin.com/ey32SzBP

chrome.extension.sendMessage({}, function(response) {
    var readyStateCheckInterval = setInterval(function() {
    if (document.readyState === "complete") {
        clearInterval(readyStateCheckInterval);


    if(window.location.hash=="#script") {


    var oneKeyOnly = true;


    function checkItem() {
    var itemsArray = ["Apples", "Bananas", "Oranges", ];
    var matchingItems = [];
    var x = document.getElementsByClassName("item");
    for(var y = 0; y < x.length; y++){
        if(itemsArray.indexOf(x[y].getAttribute("data-name")) >= 0){
            var id = x[y].getElementsByClassName("item-checkbox")[0].getAttribute("id");
            matchingItems.push(id);
        }
    }
    return matchingItems;
}


function randomIntFromInterval(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

function clickButton(val)
{
    var buttons = document.getElementsByTagName('input');
    for(var i = 0; i < buttons.length; i++)
    {
       if(buttons[i].type == 'submit' && buttons[i].value == val)
       {
           buttons[i].click();
           console.log("Trying to withdraw!");
           break;
       }
    }
}

var result = checkItem();
var lengthOfArray = result.length - 1;

if (oneKeyOnly == true) {
var rand = randomIntFromInterval(0,lengthOfArray);
document.getElementById(result[rand]).checked = true
console.log("Found: " + result[rand]);
}
else {

for(index=0, len = result.length; index < len; ++index) {
    document.getElementById(result[index]).checked = true
    keynr = index + 1;
    console.log("Found " + result.length + " fruits - Selected Nr. " + keynr + "!");
}

}
clickButton("Withdraw selected items");

setTimeout(location.reload(true);}, 5000);


}

    }
    }, 10);
});

如果有任何不清楚的地方,请告诉我!

尝试将reload方法包装在匿名函数中,如下所示

setTimeout((function(){location.reload(true)}), 5000);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM