以下是用于检查我的页面会话的函数。单击警报消息后,页面将重新加载。
var timeleft = 60;
function checkTime() {
timeLeft--;
if (timeLeft == 30 )
{
alert("30 secs left.");
window.location.reload();
}
}
无论如何,timeleft继续减去(如果用户没有注意到警告消息),那么当timeleft = 0时它将重定向到注销页面。
答案 0 :(得分:2)
alert()
是一个模态,它会停止javascript执行。检查此代码:
var start = new Date();
var start2;
window.setTimeout(function() {
var end = new Date();
var result = "time from start: " + (end.getTime() - start.getTime())
result += "\ntime from alert: " + (end.getTime() - start2.getTime())
result += "\nalert was open for: " + (start2.getTime() - start.getTime())
alert(result);
}, 500);
window.setTimeout(function() {
alert("hello");
start2 = new Date();
}, 100);
上层代码小提琴:http://jsfiddle.net/aorcsik/vfeH2/1/
查看此代码,它显示即使在alert()
期间停止setTimeout,但您可以检查用户查看提醒的时间,并通过减少更新您的计数器(timeLeft
)测量时间由您的股票代码延迟划分。
解决方案:所以我的解决方案是测量用户查看警报模式的时间,每当他点击确定时,检查他的会话是否结束,如果是重定向到注销,否则执行通常的重定向。
var start = new Date();
alert("xxx");
var t = (new Date()).getDate() - start.getDate();
if (t / 1000 > timeLeft) {
/* logout */
} else {
/* redirect */
}
注意:另一个解决方案是使用一些html弹出窗口而不是javascript警报,这不会阻止javascript执行
答案 1 :(得分:2)
如果您想要异步提醒,可以试试这个
setTimeout(function() { alert('30 secs left'); }, 1);
但是如果你想要一个定时注销,你可以做这样的事情:
function checkTime() {
setInterval(function(){alert("30 secs left.")},30000); // shown at 30 seconds
setInterval(function(){logout()},60000); // called at 60 seconds
}
function logout() {
// logout functionality
}
答案 2 :(得分:1)
您的代码评论很奇怪 首先你使用一个数字(60)并将其视为(两分钟)然后提醒它(剩下30秒)..
无论如何...... 你想要倒计时,只剩下30秒你想重新加载页面!!
这里的问题是,当您重新加载页面时,您将重置计数(如代码中的60)
解决方案是以下之一: 1-保存localForage中的倒计时,如@Fabrizio所指出的,当再次重新加载页面时,请使用保存的反对值。 但是,此解决方案假设您的用户浏览器可以保存到localstorage
2-秒解决方案是您使用倒计时发布您的页面并重新加载倒计时.. 让我们说你的页面地址是:www.myexampleaddress.com/mypage 然后你拨打以下地址:www.myexampleaddress.com/mypage?timeleft = 30
并在服务器上捕获此内容,并使用查询字符串中的值从服务器重新加载页面。
所以警报之后应该是这样的
var myURL = location.href+'?timeleft=30';
location.href =myURL;
我希望得到帮助:)