如何在特定时间自动重新加载网页?

Posted

技术标签:

【中文标题】如何在特定时间自动重新加载网页?【英文标题】:How to automatically reload a web page at a certain time? 【发布时间】:2010-11-16 02:50:46 【问题描述】:

我有一个网站,我想在特定时间(例如下午 3:35)重新加载,而不是在特定时间间隔(例如 5 分钟)之后重新加载。我该怎么做?

【问题讨论】:

更多上下文,“重新加载”它如何/在哪里/什么,什么样的网络服务器? 我们需要比这更多的信息。从一个实际的问题开始。 我重写了问题以使其更清楚 - 希望我理解了 Edwin 的意图。 您是为自己(例如,为了某些维护任务)还是为用户加载它? 【参考方案1】:

如果您使用 Flask,您可以将变量设置为与网络时间同步。在 Flash 应用中

from datetime import *`
    def syncRefresh():`
      while (datetime.now().second % 10 !=0):`
          continue`
       return True`

和@app.route('/', methods =["GET")

    def table():
       ....
         if syncRefresh():
            refreshNow = True  # refreshNow is the variable passed to the web page

html页面中

     % if refreshNow  %
         <meta http-equiv="refresh"   content="1">
    % endif %

【讨论】:

【参考方案2】:

以下 javascript sn-p 将允许您在给定时间刷新:

function refreshAt(hours, minutes, seconds) 
    var now = new Date();
    var then = new Date();

    if(now.getHours() > hours ||
       (now.getHours() == hours && now.getMinutes() > minutes) ||
        now.getHours() == hours && now.getMinutes() == minutes && now.getSeconds() >= seconds) 
        then.setDate(now.getDate() + 1);
    
    then.setHours(hours);
    then.setMinutes(minutes);
    then.setSeconds(seconds);

    var timeout = (then.getTime() - now.getTime());
    setTimeout(function()  window.location.reload(true); , timeout);

然后你可以添加一个脚本标签来调用refreshAt()函数。

refreshAt(15,35,0); //Will refresh the page at 3:35pm

请注意,此代码将根据客户端本地时间刷新。如果您希望它在特定时间而不考虑客户端的时区,您可以将时间对象上的 get*()set*()getTime() 除外)替换为它们的 getUTC*()setUTC*() 等效项,以便固定它到UTC。

【讨论】:

能否请您提供一个示例,让您只有像这样的分钟和秒refreshAt(35,0); 在 2018 年仍然有效。我不得不把它全部包装起来 i $( document ).ready(function() 但效果很好。 我可以确认这在 2020 年帮助了我! 对于其他想要使用 jQuery 的文档就绪代码: $(document).ready(function() refreshAt(15,35,0); ); @davidb function refreshAtM_S(m,s) refreshAt(0, m, s); 【参考方案3】:

希望对你有帮助,你可以设置刷新的确切时间

var target = new Date("November 18, 2019 10:00:00");
timeOffset = target.getTimezoneOffset() * 60000;
targetTime = target.getTime();
targetUTC = targetTime + timeOffset;

var today = new Date();
todayTime = today.getTime();
todayUTC = todayTime + timeOffset;

refreshTime = (targetUTC - todayUTC);
if (refreshTime > 1) 
setTimeout(function()  window.location.reload(true); , refreshTime);

【讨论】:

【参考方案4】:

这更适合我的目的。

如果你能够使用 Jquery 和 MomentJs,你可以这样做:

(function () 
    var $ = require('jquery');
    var moment = require('moment');

    function refreshPageAtTime(expiration, countdownElement) 
        var now = moment.utc();
        console.log('now', now);
        var expirationMoment = moment.utc(expiration, 'YYYY-MM-DD kk:mm:ss');
        console.log('target', expirationMoment);
        var secondsUntilRefresh = expirationMoment.diff(now, 'seconds');//http://momentjs.com/docs/#/displaying/difference/
        console.log('diff in seconds', secondsUntilRefresh);
        if (secondsUntilRefresh > 1) 
            setInterval(function () 
                secondsUntilRefresh--;
                console.log('seconds remaining', secondsUntilRefresh, 'seconds');
                if (secondsUntilRefresh <= 10) 
                    countdownElement.html(secondsUntilRefresh + '...');
                    if (secondsUntilRefresh === 0) 
                        console.warn('Refreshing now at ' + moment.utc());
                        window.location.reload(true);
                    
                
            , 1000 * 1);
        
    

    $(document).ready(function () 
        var expiration = $('form').attr('data-expiration');
        console.log('expiration', expiration);
        $('.btn-primary:submit').after('<div id="countdownToRefresh" style="display: inline-block; color: #999; padding: 10px;"></div>');
        refreshPageAtTime(expiration, $('#countdownToRefresh'));

    );
)();

【讨论】:

【参考方案5】:

使用它每 20 秒刷新一次页面。

<META HTTP-EQUIV="refresh" CONTENT="20">

【讨论】:

【参考方案6】:

我发现这个页面有一个类似的问题,并用它来破解一个可能对某些人有用的更具体的答案。对于这个项目,我们希望确保在全球感兴趣的现场活动即将开始时刷新页面,激活嵌入在用户页面上的播放器(我知道用例很窄——其他人可能有更好的用途它)。

上述答案中的一个挑战是如何处理时区转换,这对我们来说是一个更大的问题,因为我们希望确保页面在特定的日期和时间刷新。为此,我获取了目标日期和今天日期的 UTC 版本,将它们转换为 GMT,然后将 Andrew 的超时函数设置为两者之间的差异。


var target = new Date("January 28, 2011 13:25:00");
timeOffset = target.getTimezoneOffset() * 60000;
targetTime = target.getTime();
targetUTC = targetTime + timeOffset;

var today = new Date();
todayTime = today.getTime();
todayUTC = todayTime + timeOffset;

refreshTime = (targetUTC - todayUTC);
if (refreshTime > 1) 
    setTimeout(function()  window.location.reload(true); , refreshTime);

【讨论】:

目标日期在不同地区会有所不同,这就是为什么我们调整您的代码以直接在以下位置创建 UTC 日期:gist.github.com/atfornes/346cc199c1ce6ac2a7f9bec4b65ccd83 超级有帮助。我最终使用了@atfornes 版本。我仍然对timeOffset 中的“60000”是什么感到困惑。它有效,但如何! 这就是我正在寻找的,谢谢!【参考方案7】:

基本上,有许多 javascript 代码可以在几分钟内刷新页面,您也可以编辑它们以在几小时内刷新。喜欢这个:

//enter refresh time in "minutes:seconds" Minutes: 0 to Whatever
//Seconds should range from 0 to 59
var limit = "0:30";

if (document.images) 
    var parselimit = limit.split(":");
    parselimit = parselimit[0] * 60 + parselimit[1] * 1;

var beginrefresh = function () 
    if (!document.images) return if (parselimit == 1) window.location.reload()
    else 
        parselimit -= 1;
        curmin = Math.floor(parselimit / 60);
        cursec = parselimit % 60;
        if (curmin != 0) curtime = curmin + " minutes and " + cursec + " seconds left until page refresh!";
        else curtime = cursec + " seconds left until page refresh!";
        window.status = curtime;
        setTimeout("beginrefresh()", 1000);
    


window.onload = beginrefresh;

(现在只需计算您希望它刷新的分钟和秒数,例如每天中午,如果现在是中午:

var limit = "1440:00";

现在您可以使用此代码,但大多数代码不适用于服务器时间,而且根据您提供给我们的信息,我们真的无能为力。编辑您的问题并告诉我们您是否希望它与服务器时间或其他时间同步。

【讨论】:

【参考方案8】:
<META HTTP-EQUIV="Refresh" CONTENT="5">

这将强制页面每 5 秒重新加载一次。只需计算正确的间隔并将其添加到内容标签中

【讨论】:

@Sorantis: 在服务器端执行此操作的问题在于时区不同,而且您并不总是拥有有关客户端 tz 的信息。 问题是关于特定时间而不是时间间隔 我非常喜欢这个解决方案。不是这个问题的完美答案,但我认为这是一个很好的解决方案,因为它避免了 java 脚本。你只需要计算服务器端的时间。时区一点也不难。【参考方案9】:

基本上,当页面被访问时,计算访问时间和您想要重新加载页面的时间之间剩余的时间,并在元刷新标题中使用该剩余时间。显然,这需要在 CGI 脚本或 Web 应用程序中完成,或者可能使用 SSI(服务器端包含);如果你只有一个静态 HTML 文件,它就行不通。

另一种选择是使用 Javascript,但如果客户端禁用了 Javascript,它将无法工作。

【讨论】:

@David: 在服务器端执行此操作的问题在于时区不同,而且您并不总是拥有有关客户端 tz 的信息。 这可能没有必要。 OP 没有说他是否想在客户端时区或服务器时区的给定时间重新加载页面。

以上是关于如何在特定时间自动重新加载网页?的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中单击按钮重新加载网页,但在重新加载调用函数后

如何在 django 中重新加载一段网页?

仅在 html 代码中使用 javascript 重新加载特定页面一次

如何在swift 3中重新加载没有动画的特定单元格?

当用户点击地址栏输入使用 JQuery 或 JS 时,如何防止网页重新加载

如何在 UIView swift 中重新加载特定的子视图?