如何结合window.location.href和DOMContentLoaded

时间:2019-02-01 21:51:44

标签: javascript

我正在使用ipinfo.io来检测访问者所在的国家/地区,然后根据该页面重新加载带有附加查询字符串的页面。页面加载后,我想在DOMContentLoaded之后做一些事情。

如果我不重新加载页面,则

DOMContentLoaded会很好,但是我希望它可以与重新加载一起使用。我该如何实现?

下面的示例代码:

<p>

1 个答案:

答案 0 :(得分:3)

您这里有一个竞赛条件:根据您的描述,getJSON命令很可能与DOMContentLoaded事件一起“竞赛”。如果getJSON在您的DOM准备就绪之前是成功的,那么它将重定向页面并停止该页面上的所有脚本执行。

为避免这种情况,请尝试将getJSON移至DOMContentLoaded回调中。

document.addEventListener("DOMContentLoaded", function() {

  jQuery.getJSON('https://ipinfo.io', function(data) {
    if (data) {
      if (data.country) {
        if (data.country.toLowerCase() == 'us') {
          window.location.replace(window.location.href + "?location=us");
        }
      }
    }
  });

  // Other logic here

});

另一方面,可以通过组合三个if语句来避免三重嵌套(请记住,在可能的情况下,请===使用严格比较):

jQuery.getJSON('https://ipinfo.io', function(data) {
    if (data && data.country && data.country.toLowerCase() === 'us') {
        window.location.replace(window.location.href + "?location=us");
    }
}