即使用户没有';不响应JavaScript';s";确认();?
这是我最初使用的代码:即使用户没有';不响应JavaScript';s";确认();?,javascript,php,Javascript,Php,这是我最初使用的代码: setInterval(function(){ r=confirm("You are about to be logged out! Press cancel if you want to remain logged in."); if (r == true){ window.location.href = '../logout.php'; }else{ location.reload(); } },30000); 确
setInterval(function(){
r=confirm("You are about to be logged out! Press cancel if you want to remain logged in.");
if (r == true){
window.location.href = '../logout.php';
}else{
location.reload();
}
},30000);
确认对话框等待用户的操作。如果操作为“取消”,它们将保持登录状态。如果操作为“OK”,则会重定向到logout.php页面。问题是,如果用户没有响应,则在经过30秒后,他们不会注销
然后我想我可以使用两个时间间隔:
setInterval(function(){
window.location.href = '../logout.php';
},60000);
setInterval(function(){
r=confirm("You are about to be logged out! Press cancel if you want to remain logged in.");
if (r == true){
window.location.href = '../logout.php';
}else{
location.reload();
}
},30000);
但是由于confirm()方法停止了脚本,因此60000毫秒永远无法实现。有什么办法可以让它发挥作用吗?这是我的建议
tId,tId1;
const end=15000,//更改为任意值-30分钟
grace=3000,//3秒-在现实生活中应该是30秒
计时器=()=>{
清除超时(tId);
tId=setTimeout(函数(){
//location.replace(“../logout.php”)
控制台日志(“注销”)
}(完),;
},
graceTime=()=>tId1=setTimeout(切换grace,结束-grace),
toggleGrace=()=>document.getElementById(“statylink”).classList.toggle(“hide”),
初始化=()=>{
定时器();
graceTime()
};
document.getElementById(“statylink”).addEventListener(“单击”,函数(e){
e、 预防默认值();
切换格雷斯();
init()
})
init()
.hide{
显示:无;
}
您每30秒询问您的用户是否希望保持登录?1分钟只是一个例子。这不是真正的问题。我本可以写60万。我想说的是,你可能应该过度思考这个概念。假设你正在写一个关于Stackoverflow的问题,一个确认对话框正好在你按下enter键的时候打开。您已注销,您的问题已消失。您是对的,确认将停止脚本。如果您想让脚本继续在后台执行,最好使用基于HTML的modalSay,如果他们离开桌面,或者关闭浏览器而不响应。