06.關於解決iframe標籤嵌套問題

問題描述

當咱們使用easyui作後臺管理系統的時候,會使用tree組件來實現樹形菜單,而咱們每點擊一次相應菜單,會根據是否有url來判斷是不是一級菜單,以及是否已經存在javascript

//根據該節點名字判斷該節點是否存在
                if ($("#tabs").tabs("exists",node.text)){
                    //若是存在就直接選中
                    $("#tabs").tabs("select",node.text);
                }

若是爲否,咱們就會嵌套一個iframe標籤來打開一個相應的html窗口html

$("#tabs").tabs("add",{
                        //標題爲當前節點的名稱
                        title:node.text,
                        //沒有邊框
                        border:false,
                        //是否顯示關閉按鈕
                        closable:true,
                        //嵌套iframe標籤
                        content:"<iframe frameborder='0' src='"+node.url+"' width='100%' height='100%'/>"
                    })

而此時有一個什麼樣的問題呢?有這樣一個狀況,當咱們在同一個瀏覽器中,在A和B兩個選項卡中都打開了後臺管理頁面,而後咱們在A頁面進行了註銷操做,此時到A頁面點擊「員工管理」,那麼此時應該要實現全局刷新並返回到登陸頁面,以下圖所示
在這裏插入圖片描述
可是此時,因爲咱們嵌套iframe的緣故,當咱們點擊員工管理,正常發送的請求是/employee/index,而此時因爲已經logout,那麼當前用戶未認證java

content:"<iframe frameborder='0' src='"+node.url+"' width='100%' height='100%'/>"

因此這裏的iframe窗體的url地址就會變成login.jsp,從而演變成了iframe嵌套問題,也就是以下圖所示:
node

解決思路

在咱們html中,每個打開的窗體都有一個window對象,例如咱們上圖所示,若是站在內層窗體的角度來說,實際上外層窗體其實就是內層窗體的父窗體(若是打開不少個嵌套,那麼最外層窗體就是top),若是要獲取外層窗體也很簡單,就是window.parent。
此時,若是咱們要打開i的窗體不是最外層窗體,咱們只須要將最外層的窗體對象賦值給當前窗體便可瀏覽器

//若是當前的窗體不是最外層窗體
        if (window != top){
            //那麼就將最外層窗體的的地址賦給當前窗體
            top.location.href = window.location.href;
        }

問題解決!jsp

相關文章
相關標籤/搜索