事情就是这样:我的webapp有大量的弹出窗口,而我的老板希望他们在会话到期时关闭,因为当会话到期并且用户在弹出窗口上按下刷新时,他将显示登录页面 - >用户登录 - >用户被定向到仪表板。现在,弹出窗口中的仪表板屏幕完全不酷。这是谷歌让我的地方:
让javascript关闭popup onload。如果会话已过期,则将此onload脚本生成到响应中(从jsp检查会话到期并有条件地包括onload脚本)。
你认为这是一个好方法吗?这种情况的最佳做法是什么?
P.S:我不允许使用AJAX
答案 0 :(得分:1)
最好的方法是检查登录并在需要时关闭它们的XMLHTTP请求 - 定期执行此操作。
敏锐的读者(意思是每个人)都会注意到这是一个AJAX请求,但是如果你这样说它可能会被接受为任何人说你不允许使用AJAX'显然是个白痴。
答案 1 :(得分:1)
在过去的生活中,我创建了一个弹出管理器对象来维护窗口打开的内容。如果还没有完成,你应该制作其中一个。然后,您可以使用setTimeout
在经过这么多分钟(或任何您想要的时间)之后调用函数。这将检查最近的活动(可能通过AJAX)并在确定会话已过期时关闭弹出窗口。如果没有,请使用新的时间再次致电setTimeout
,并针对最近的活动进行适当调整。
^^。
好吧,既然你不能使用AJAX,你能在网址中加一些东西来告诉你它是弹出窗口吗?然后,当用户点击重新加载时,您将知道不显示登录屏幕。
答案 2 :(得分:1)
如果你的老板要求你实现这一点,而不使用AJAX,那么你就麻烦了。他应该明白浏览器与服务器的唯一连接(不刷新页面)是javascript(他理解为ajax)。
执行此操作的最佳方法是在页面上设置脚本,询问服务器用户是否仍然每30秒左右登录一次。
setInterval(function(){
$.get("loggedin.php", function(result) {
if (!result.isLoggedIn)
window.close();
});
}, 30000);
此脚本假设您正在使用jQuery框架来快速开发JavaScript解决方案。这也使用JSON(Javascript Object-notation)来测试loggedin.php文件的返回值。
总而言之,您需要使用AJAX。告诉你的老板别无他法。如果他仍然没有得到它,请他在不使用数学的情况下平衡他的支票簿。
答案 3 :(得分:1)
在Web应用程序中实现模式对话框的另一种方法是:
因为模态对话框是页面源的一部分,所以当会话超时时,对话框将消失。这种方法不会产生支持窗口,当海报试图解决时,这些窗口可能是孤立的。它符合不使用AJAX的要求。
您可以手动编码,但我不推荐它,因为必须支持各种浏览器。我建议看一下Yahoo User Interface。您可以根据自己的需要定制它(IE:仅模态对话框),如果需求发生变化,它将支持AJAX。
注意从模态对话框中生成模态对话框。
答案 4 :(得分:0)
理论上,您可以通过使用隐藏的Flash小部件来避免AJAX ...
但更实际的是,AJAX是'正确'的解决方案,我认为你必须与你的老板交谈,确定这个'没有AJAX'规则的来源,并说服他说AJAX是解决这个问题的最佳方法问题
他认为AJAX会花费太多时间来实现吗?如果是这样,你应该证明他错了。他认为难以维持吗?如果是这样,请说明执行此操作的代码有多简单,以及常见的AJAX库的使用范围。如果你的老板是合理的,那么他的目标是最好的产品,你应该能够与他合理。