C# 页面刷新或移动到其他页面后保留setTimeout()

C# 页面刷新或移动到其他页面后保留setTimeout(),c#,javascript,asp.net,ajax,C#,Javascript,Asp.net,Ajax,我需要在15分钟后显示我的警报消息,但如果页面刷新或我更改页面,则警报消息不起作用。我在同一个网页上做这件事。当我按下按钮时,它应该调用showPopUp()方法。我正在使用asp.net的Visual Studio 2005版本 。 . 。 . 将初始时间存储在本地存储器中 每当页面加载时,将本地存储中的值与当前时间进行比较,然后从停止的位置再次启动超时 所以类似这样(未经测试): 然后执行与上述javascript代码类似的逻辑,并将结果作为setTimeout函数中的第二个参数输出(但

我需要在15分钟后显示我的警报消息,但如果页面刷新或我更改页面,则警报消息不起作用。我在同一个网页上做这件事。当我按下按钮时,它应该调用showPopUp()方法。我正在使用asp.net的Visual Studio 2005版本

。 .

。 .

  • 将初始时间存储在本地存储器中
  • 每当页面加载时,将本地存储中的值与当前时间进行比较,然后从停止的位置再次启动超时
  • 所以类似这样(未经测试):


    然后执行与上述javascript代码类似的逻辑,并将结果作为setTimeout函数中的第二个参数输出(但记住要将setTimeout的秒数转换为毫秒)。

    +1。请注意,
    setTimeout
    调用使用的回调无法自动保存和恢复,因为它们依赖于JavaScript引擎的状态,刷新时该状态完全丢失。我们必须明确地将函数设计为在页面刷新后“可恢复”——因此避免页面刷新(即使用AJAX调用刷新页面)可能是更好的方法。LocalStorage(或web storage)得到了很好的支持,但仅供参考,它在某些较旧的浏览器上不起作用。如果您遵循这种方法,我建议您查看一下,以确保它符合您的需要。这是一个仅限于客户端的解决方案。查看这篇文章,了解客户机/服务器解决方案的一般概念。它是用PHP编写的,但希望能有所帮助。@PavelPatino是的,使用服务器端代码是我的第二个想法。很好,大多数浏览器都可以只使用javascript。@dhtso当我按下按钮时,我还需要存储时间吗?哦,糟了,我把“SessionStorage”翻译成了.NET中的标准会话类。@Travis J我不明白你们为什么把这个评论声明为非主题。我输入了足够的代码和注释来解释这种情况。
    function showPopUp(){
      setTimeout(function() {alert("Warning");}, 5000);
     }
    
      function delayer(){
      showPopUp();
      }
    
    var waitTime = 900000; // 15 minutes
    var executionTime;
    var initialTime = localStorage.getItem("initialTime");
    if (initialTime === null) {
        localStorage.setItem("initialTime", (new Date()).getTime());
        executionTime = waitTime;
    }
    else {
        executionTime = parseInt(initialTime, 10) + waitTime - (new Date()).getTime();
        if (executionTime < 0) executionTime = 0;
    }
    
    setTimeout(function() { 
        alert("Warning"); 
        // reset the timeout to start from waitTime on page reload
        localStorage.removeItem("initialTime");
    }, executionTime);
    
    Session["InitialTime"] = (DateTime.UtcNow - New DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;