第一页加载后刷新一次页面


84

我想实现一个JavaScript代码,声明以下内容:如果页面完全加载,请立即刷新页面,但仅刷新一次。我被困在“只有一次”:

window.onload = function () {window.location.reload()}

这给出了一个没有“仅一次”的循环。如果有帮助,将加载jQuery。


1
重新加载页面可以完成什么工作?解决这个问题可能有更好的方法。
FishBasketGordo 2011年

在页面上开始有一个jquery全屏画廊脚本,但是拇指从未完全加载。如果您点击页面的“刷新”按钮,它只会加载其余的按钮...因此很显然,我正在寻找某种解决方法...单独给大拇指做的太复杂了(CMS),其他错误修复并没有真的无济于事...大约4 MB的图像。每个300kb,在某些时候图像的缩略图不再调整大小并显示出来(超时?太大,太大?),但是页面加载完成。
马丁

使用pjax pjax.heroku.com时,我遇到了类似的问题(javascript无法正常工作)。
Pratik Khadloya'1

Answers:


97

我会说使用哈希,像这样:

window.onload = function() {
    if(!window.location.hash) {
        window.location = window.location + '#loaded';
        window.location.reload();
    }
}

是的 我只是建议那个。
p3drosola 2011年

是的,类似于我对使用$ _GET参数的建议,但是有点容易,因为访问JS中的哈希比访问$ _GET参数更容易...
maxedison 2011年

4
只要URL中没有哈希,这是最简单的。在这种情况下,读取GET参数会更好。
大卫,

如何在不附加网址的情况下执行此操作?
zero_cool 2014年

聪明的解决方案!爱它!❤
阿努

46

遇到此问题时,我会搜索到此处,但是大多数答案都在尝试修改现有的url。这是另一个使用localStorage的答案。

<script type='text/javascript'>

(function()
{
  if( window.localStorage )
  {
    if( !localStorage.getItem('firstLoad') )
    {
      localStorage['firstLoad'] = true;
      window.location.reload();
    }  
    else
      localStorage.removeItem('firstLoad');
  }
})();

</script>

创意解决方案。
JoJo

30
<script type="text/javascript">
$(document).ready(function(){    
    //Check if the current URL contains '#'
    if(document.URL.indexOf("#")==-1){
        // Set the URL to whatever it was plus "#".
        url = document.URL+"#";
        location = "#";

        //Reload the page
        location.reload(true);
    }
});
</script>

由于if条件,该页面只能重新加载一次。我也遇到了这个问题,当我搜索时,我发现了这个不错的解决方案。这对我来说很好。


9

选中此链接,其中包含一个Java脚本代码,您只能使用该Java脚本代码刷新一次页面

http://www.hotscripts.com/forums/javascript/4460-how-do-i-have-page-automatically-refesh-only-once.html

刷新页面有多种方法:

解决方案1

要在每次打开页面时刷新一次,请使用:

<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
</head>

解决方案2:

<script language=" JavaScript" >
<!-- 
function LoadOnce() 
{ 
window.location.reload(); 
} 
//-->
</script>

然后改变你的说法

<Body onLoad=" LoadOnce()" >

解决方案3:

response.setIntHeader("Refresh", 1);

但是此解决方案将刷新页面一次以上,具体取决于您指定的时间

希望对您有帮助


3

我将其放在页面的head标签中,我希望一次重新加载:

<?php if(!isset($_GET['mc'])) {
echo '<meta http-equiv="refresh" content= "0;URL=?mc=mobile" />';
} ?>

值“ mc”可以设置为任意值,但是两者必须在2行中匹配。并且“ = mobile”可以是“ = anythingyouwant”,它只需要一个值即可停止刷新。


3

最后,经过两个月的研究,我得到了一次重新加载页面的解决方案。

它在我的客户端JS项目上运行良好。

我写了一个仅在重新加载页面下面的函数。

1)首先获取浏览器domload时间

2)获取当前时间戳

3)浏览器加载时间+ 10秒

4)如果浏览器的domload时间+当前当前时间戳的10秒钟,则可以通过“ reloadPage();”刷新页面

但是如果它不大于10秒,则意味着页面只是被重新加载,因此不会重复加载。

5)因此,如果您调用“ reloadPage();” js文件页面中某处的函数只会重新加载一次。

希望对别人有帮助

// Reload Page Function //
                function reloadPage() {
                    var currentDocumentTimestamp = new Date(performance.timing.domLoading).getTime();
                    // Current Time //
                    var now = Date.now();
                    // Total Process Lenght as Minutes //
                    var tenSec = 10 * 1000;
                    // End Time of Process //
                    var plusTenSec = currentDocumentTimestamp + tenSec;
                    if (now > plusTenSec) {
                        location.reload();
                    }
                }


                // You can call it in somewhere //
                reloadPage();

3
<script>

function reloadIt() {
    if (window.location.href.substr(-2) !== "?r") {
        window.location = window.location.href + "?r";
    }
}

setTimeout('reloadIt()', 1000)();

</script>

这完美地工作


注意:1000表示1秒,您可以将其设置为所需的任何时间间隔。
戈德温·汤米

1

</body>标记:

<script type="text/javascript">
if (location.href.indexOf('reload')==-1)
{
   location.href=location.href+'?reload';
}
</script>

0

您需要使用GET或POST信息。GET将是最简单的。您的JS会检查URL,如果未找到特定参数,它不仅会刷新页面,还会将用户发送到“不同” URL,该URL是相同的URL,但其中包含GET参数。

例如:
http : //example.com- >将刷新
http://example.com?refresh=no- >不会刷新

如果您不想使用混乱的URL,那么我会在正文的开头添加一些PHP,以回显一个隐藏的值,该值本质上表示初始页面请求中是否包含了用于刷新页面的必要POST参数。之后,您将包括一些JS以检查该值,并在必要时刷新带有该POST信息的页面。


0

试试这个

var element = document.getElementById('position');        
element.scrollIntoView(true);`



0

用这个

<body onload =  "if (location.search.length < 1){window.location.reload()}">

0

使用window.localStorage ...像这样

var refresh = $window.localStorage.getItem('refresh');
console.log(refresh);
if (refresh===null){
    window.location.reload();
    $window.localStorage.setItem('refresh', "1");
}

对我有用


0

这是使用setTimeout的另一种解决方案,虽然不完美,但是可以使用:

它在当前URL中需要一个参数,因此只需对当前URL进行如下显示即可:

www.google.com?time=1

以下代码使页面仅重新加载一次:

 // Reload Page Function //
    // get the time parameter //
        let parameter = new URLSearchParams(window.location.search);
          let time = parameter.get("time");
          console.log(time)//1
          let timeId;
          if (time == 1) {
    // reload the page after 0 ms //
           timeId = setTimeout(() => {
            window.location.reload();//
           }, 0);
   // change the time parameter to 0 //
           let currentUrl = new URL(window.location.href);
           let param = new URLSearchParams(currentUrl.search);
           param.set("time", 0);
   // replace the time parameter in url to 0; now it is 0 not 1 //
           window.history.replaceState({}, "", `${currentUrl.pathname}?${param}`);
        // cancel the setTimeout function after 0 ms //
           let currentTime = Date.now();
           if (Date.now() - currentTime > 0) {
            clearTimeout(timeId);
           }
          }

可接受的答案使用最少的代码,并且易于理解。我只是为此提供了另一种解决方案。

希望这对其他人有帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.