【问题标题】:How to automatically reload a web page如何自动重新加载网页
【发布时间】:2017-05-10 09:23:45
【问题描述】:

我希望我的网站页面在首次打开时重新加载一次。为此,我在我的 javascript 文件中编写了这个函数...

var i;
$(document).ready(function(){
    for ( i=0;i<1;i++){
        if(i===0){
            location.reload();
            break;
        }  
    }
});

但是页面不断地重新加载,就好像上面的函数是一个递归函数一样。
我该怎么做?

P.S 我这样做是因为 this 问题。

【问题讨论】:

  • 这个要求的原因是什么?
  • 您的问题是,一旦页面重新加载 - i 变量将返回 0(您将进入循环)。您可以使用 cookie/localstorage 保存页面已经加载过一次的事实(以防止再次加载)。你为什么要这样做?!
  • 它不是递归的,只是每次再次加载时都会触发一个新的ready
  • &lt;script type='text/javascript'&gt; (function() { if( window.localStorage ) { if( !localStorage.getItem('firstLoad') ) { localStorage['firstLoad'] = true; window.location.reload(); } else localStorage.removeItem('firstLoad'); } })(); &lt;/script&gt;
  • 不要使用循环..当页面完全加载时重新加载页面..在就绪事件函数或加载事件函数中

标签: javascript for-loop web break


【解决方案1】:
<script type='text/javascript'>
  (function() {
    if( window.localStorage ) { 
      if( !localStorage.getItem('firstLoad') ) { 
        localStorage['firstLoad'] = true;
        window.location.reload(); 
      } else 
        localStorage.removeItem('firstLoad'); 
    } 
  })();
</script>

【讨论】:

  • 您能补充说明吗?这对于一直关注该主题的人来说是有意义的,但对于后来偶然发现这一点的人来说就不是那么回事了。
【解决方案2】:

这是发生了什么:

  • 页面第一次加载,jQuery调用document.ready事件上的任何handler

  • 页面重新加载

  • 再次调用 document.ready

  • 重复

出于好奇,您为什么要这样做?为什么你有一个会运行一次迭代的 for 循环?


此外,据我所知,要回答您的问题,确保页面不会重新加载的唯一方法是使用持续约 5 秒的 cookie。然后,在 document.ready 上检查该 cookie,如果存在则不要重新加载。

【讨论】:

    【解决方案3】:

    您必须设置 cookie(或使用 javascript 的 localStorage),或使用 xhr 检索远程服务器上保存的值。

    如果你想使用cookies,那么简单

    document.cookie = "username=John Doe";

    其中 document.cookie 是表单的查询字符串 (x=y;a=b;n=z)

    如果您希望每次用户访问时都重新加载页面,请确保在设置页面重新加载后完成任何必要的处理后取消设置 cookie。

    【讨论】:

    • cookie 与 localStorage 不同。
    • 一个cookie不是本地存储?
    • cookies保存在本地,但和localStorage不一样
    • 我承认 localStorage 与本地存储不同,但本地存储作为一个概念肯定适用于 cookie。我会适当地更新答案,以免造成混淆。
    • 谢谢,我发表评论是因为我认为会有一些混乱,尤其是对于新用户。
    【解决方案4】:
    $( window ).load(function() {
        if (window.location.href.indexOf('reload')==-1) {
             window.location.replace(window.location.href+'?reload');
        }
    });
    

    【讨论】:

    • 聪明,但最好设置window.location.search而不是在href的末尾添加字符串。
    【解决方案5】:

    代码没问题。但是,如果该页面是从另一个带有指向 id (.../page.html#aa) 链接的页面打开的,则该代码仅适用于 firefox。用其他浏览器重新加载页面而不去 id。 (对不起我的英语)。

    【讨论】:

    • 考虑解释为什么这个问题与其他答案一起出现并提出解决方案。
    【解决方案6】:

    我用这段代码找到了解决方案。假设页面刷新不早于一小时。否则,将分钟添加到 oggindex 变量。

    <script>
    var pagina = window.location.href; 
    var d = new Date();
    var oggiindex = d.getMonth().toString()+'-'+d.getDate().toString()+'-'+d.getHours().toString();
    if (localStorage.ieriindex != oggiindex)
        {
        localStorage.setItem("ieriindex", oggiindex);
        window.location.replace(pagina);
        }
     </script>  
    

    【讨论】:

      【解决方案7】:

      您的代码每次都会执行 $(document).ready(),因此您的循环是无限的也就不足为奇了 - 每次加载都以就绪状态完成。

      如果您提出更详细的要求,我们可以在不使用窗口对象作为数据持有者的情况下解决它。这是不好的方法,但您可以将其设置为测试。

      Window 对象存储变量不依赖于重新加载,因为它高于文档。

      让我们试试吧:

      if( window.firstLoad == undefined  ){
          // yours code without any loop
          // plus:
          window.firstLoad = false;
      }
      

      您可以使用 localStorage API 来实现。

      也请查看此链接,它提供了有关窗口对象变量的更多信息: Storing a variable in the JavaScript 'window' object is a proper way to use that object?

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        相关资源
        最近更新 更多