之前搭建了一个小项目,在登录超时后返回登录页会在iframe里打开登录页面,这显然不是我想实现的效果,应该是拦截之后,登录页面在iframe的顶层页面显示,趁着今天有时间就查了一下如何解决这个bug。

登录拦截之后,登录页面出现在iframe的src里面_顶层刷新

解决办法,在登录页面中,添加js判断,如果不是顶层框架跳转到登录页面,则将顶层的页面url设置为跳转当前这个iframe框架的页面,也许是一个转发的action,也许是重定向到login.jsp页面。为了逻辑的清晰,最好是在后端的logout方法中,重定向到login.jsp。

login.jsp页面中的js判断为:

$(function(){
	login.initPage();
});
 
var login = {
	//初始化页面跳转,为了防止从iframe跳转到login页面直接在iframe中显示login页面
	initPage : function() {
		//alert(location.href);
		if(window.top != window.self){
			top.location.href = location.href;
		}
	},
}
/* 
或者直接添加一个if判断
if (window != top) {
	top.location.href = location.href;
} */

但是这样虽然实现类登录失效拦截后,iframe顶层进入登录页面,但是是在login.jsp加载完之后执行的if判断,这样还是将top.jsp闪了一下,显然这样并不是一个完美的方法,但是又没有更好的解决办法也只能先这样用了。