【问题标题】:window.location.reload(); stuck in infinite loopwindow.location.reload();陷入无限循环
【发布时间】:2021-01-23 00:00:12
【问题描述】:

我希望这个函数循环遍历所有项目,如果它找到正确的项目来加载它的页面,如果它没有找到正确的项目,它应该重新加载页面并再次循环。当我删除 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()
}

【问题讨论】:

    标签: javascript google-chrome for-loop dom window.location


    【解决方案1】:

    我建议添加一个布尔变量,指示是否已找到要导航到的位置,并将对 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();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 2013-03-17
      • 2021-02-15
      • 2022-01-23
      • 2015-04-02
      相关资源
      最近更新 更多