javascript - window.location.reload(); 陷入无限循环
问题描述
我希望这个函数循环遍历所有项目,如果它找到正确的项目来加载它的页面,如果它没有找到正确的项目,它应该重新加载页面并再次循环。当我删除 window.location.reload(); 它正常加载到项目页面。这是代码:
var item_name = "Washed";
var item_color = "Red";
function pickItem() {
let items = document.getElementsByClassName("name-link");
for(i = 0; i < items.length; i++) {
if((items[i].innerHTML).includes(item_name)) {
for(j = 0; j < items.length; j++) {
if((items[j].innerHTML).includes(item_color)) {
if(items[i].href == items[j].href) {
window.location.assign(items[i, j].href);
}
}
}
}
}
window.location.reload();
}
在下面的形式中,它可以按我的意愿工作,但是为什么它需要 chrome.storage 函数才能工作?(我之前将它与 chrome.storage 一起使用,但它对我的目的来说太慢了,所以我不得不改变它。)
var item_name = "Washed";
var item_color = "Red";
function pickItem() {
let items = document.getElementsByClassName("name-link");
chrome.storage.sync.get(["itemName", "color"], function(data) {
for(i = 0; i < items.length; i++) {
if((items[i].innerHTML).includes(item_name)) {
for(j = 0; j < items.length; j++) {
if((items[j].innerHTML).includes(item_color)) {
if(items[i].href == items[j].href) {
window.location.assign(items[i, j].href);
chrome.storage.sync.set({"item_url": items[i, j].href});
}
}
}
}
}
})
window.location.reload()
}
解决方案
我建议添加一个布尔变量,该变量指示是否已找到要导航到的位置,并将调用包装 window.location.reload()
在一个检查变量状态的 if 块内。
例如
function pickItem() {
let items = document.getElementsByClassName("name-link");
let found = false;
for (i = 0; i < items.length; i++) {
if ((items[i].innerHTML).includes(item_name)) {
for (j = 0; j < items.length; j++) {
if ((items[j].innerHTML).includes(item_color)) {
if (items[i].href == items[j].href) {
found = true;
window.location.assign(items[i, j].href);
}
}
}
}
}
if (!found) {
window.location.reload();
}
}
推荐阅读
- python - 如何在 Python 中压缩这个 if 语句?
- python - 如果出现值,则检查下 x 行
- sql-server-2017 - 客户端如何知道使用 SQL Server 始终加密哪些列?
- xcode - 如何从 Xcode 中的 pre 操作中获取环境变量?
- javascript - Promise.all 中的 Node.js“fs.writeFile()”回调在 Promise.all 解决后执行
- reactjs - React 优化:将 useMemo 应用于 useState 返回值的目标是什么?
- mysql - MySQL:错误出现在过程的插入语句中
- objective-c - 在非 ARC 代码中从 NSKeyedArchiver 中提取数据
- python - AWS ECS 通过 Python,寻找退出状态(甚至可能是标准输出)
- swift - 快速十进制格式到双格式问题