傳統的系統界面,有iframe頁面,當用戶退出系統或者session過期或者非法請求時,都要使當前頁面跳轉到登錄頁面。比如用戶點擊註銷的按鈕在上面得top.jsp裡面,方法:<a href="../login/action_logout.do">退出系統</a>退出之後你會發現,只是刷新了top.j
傳統的系統界面,有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> 就可以了,他的原理相當於目標頁面替換當前的父窗體,而不是當前操作的窗體。
target屬性值的含義:
_blank:新建視窗、_self:相同視窗、_parent:父視窗、_top:首視窗
2、利用js
1)<a href="#" onclick=top.location.replace("logout.action")>退出</a>
在logout()函數中將session清空,返回的登錄頁面就會全屏顯示登錄頁面.他的原理相當於在請求發送前,把請求的頁面替換成當前頁面最頂級的frame,這樣返回的頁面理所應當的會替換整個頁面的內容。
2)在login.jsp中加入腳本
?1 2 3 4 5 |
function window.onload()
{
if (window.parent.length>0)
window.parent.location=location;
}
|
或
?1 2 3 4 5 |
<script type= "text/javascript" >
if (top.location !== self.location) {
top.location=self.location;
}
</script>
|
或
?1 2 3 4 |
<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代碼,從而判斷是不是頂級窗體而自動跳轉。
這兩種方法的區別就在於一個是提交請求之前對請求進行處理,另外一個是請求回來以後進行處理。