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