传统的系统界面,有iframe页面,当用户退出系统或者session过期或者非法请求时,都要使当前页面跳转到登录页面。比如用户点击
退出的按钮
在上面得top.jsp里面,方法:<a href="../login/action_logout.do">退出系统</a>退出之后你会发现,只是刷新了top.jsp上面那个iframe,其他两个还在,当然不允许这样啦。解决办法大致有几种:常规的
退出系统
无非就是两种方式,一个是
点击超链接
,页面跳转到登录页面,另一个就是
点击页面元素,触发js事件
,使当前页面跳转。
1、利用超链接属性中target="_parent"。
在超链接中加入target属性
<a href="../login/action_logout.do"
target="_parent
">(或者<a href="../login/action_logout.do"
target="_top">)
退出系统</a>
就可以了,他的原理相当于目标页面替换当前的父窗体,而不是当前操作的窗体。
target属性值的含义:
_blank:新建窗口、_self:相同窗口、_parent:父窗口、_top:首窗口
2、利用js
1)<a href="#" οnclick=top.location.replace("logout.action")>退出</a>
在logout()函数中将session清空,返回的登录页面就会全屏显示登录页面.他的原理相当于在请求发送前,把请求的页面替换成当前页面最顶级的frame,这样返回的页面理所应当的会替换整个页面的内容。
2)在login.jsp中加入脚本
function
window
.
onload
()
{
if
(
window
.parent.length>
0
)
window
.parent.location=location; }
或
<script type=
"text/javascript"
>
if
(top
.location
!==
self
.location
) {
top
.location
=
self
.location
; }
</script>
或
<script language=
"JavaScript"
>
<span style=
"white-space:pre"
>
</span> if (window != top)
<span style=
"white-space:pre"
>
</span> top.location.href = location.href;
</script>
当登录页面在frame中加载过程中,会触发这段js代码,从而判断是不是顶级窗体而自动跳转。
这两种方法的区别就在于一个是
提交请求之前对请求进行处理
,另外一个是
请求回来以后进行处理
。