關(guān)于解決iframe標(biāo)簽嵌套問題的解決方法
問題描述
當(dāng)我們使用easyui做后臺管理系統(tǒng)的時(shí)候,會使用tree組件來實(shí)現(xiàn)樹形菜單,而我們每點(diǎn)擊一次相應(yīng)菜單,會根據(jù)是否有url來判斷是否是一級菜單,以及是否已經(jīng)存在
//根據(jù)該節(jié)點(diǎn)名字判斷該節(jié)點(diǎn)是否存在
if ($("#tabs").tabs("exists",node.text)){
//如果存在就直接選中
$("#tabs").tabs("select",node.text);
}
如果為否,我們就會嵌套一個(gè)iframe標(biāo)簽來打開一個(gè)相應(yīng)的html窗口
$("#tabs").tabs("add",{
//標(biāo)題為當(dāng)前節(jié)點(diǎn)的名稱
title:node.text,
//沒有邊框
border:false,
//是否顯示關(guān)閉按鈕
closable:true,
//嵌套iframe標(biāo)簽
content:"<iframe frameborder='0' src='"+node.url+"' width='100%' height='100%'/>"
})
而此時(shí)有一個(gè)什么樣的問題呢?有這樣一個(gè)情況,當(dāng)我們在同一個(gè)瀏覽器中,在A和B兩個(gè)選項(xiàng)卡中都打開了后臺管理頁面,然后我們在A頁面進(jìn)行了注銷操作,此時(shí)到A頁面點(diǎn)擊“員工管理”,那么此時(shí)應(yīng)該要實(shí)現(xiàn)全局刷新并返回到登錄頁面,如下圖所示

但是此時(shí),由于我們嵌套iframe的緣故,當(dāng)我們點(diǎn)擊員工管理,正常發(fā)送的請求是/employee/index,而此時(shí)由于已經(jīng)logout,那么當(dāng)前用戶未認(rèn)證
content:"<iframe frameborder='0' src='"+node.url+"' width='100%' height='100%'/>"
所以這里的iframe窗體的url地址就會變成login.jsp,從而演變成了iframe嵌套問題,也就是如下圖所示:

解決思路
在我們html中,每一個(gè)打開的窗體都有一個(gè)window對象,例如我們上圖所示,如果站在內(nèi)層窗體的角度來講,實(shí)際上外層窗體其實(shí)就是內(nèi)層窗體的父窗體(如果打開很多個(gè)嵌套,那么最外層窗體就是top),如果要獲取外層窗體也很簡單,就是window.parent。
此時(shí),如果我們要打開i的窗體不是最外層窗體,我們只需要將最外層的窗體對象賦值給當(dāng)前窗體即可
//如果當(dāng)前的窗體不是最外層窗體
if (window != top){
//那么就將最外層窗體的的地址賦給當(dāng)前窗體
top.location.href = window.location.href;
}
到此這篇關(guān)于關(guān)于解決iframe標(biāo)簽嵌套問題的解決方法的文章就介紹到這了,更多相關(guān)iframe標(biāo)簽嵌套內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 在不用iframe的情況下嵌套頁面,所以只好在div中嵌套,下面是具體的實(shí)現(xiàn),主要使用到了jquery,大家可以參考下2014-04-11
iframe 多層嵌套 無限嵌套 高度自適應(yīng)的解決方案
有A,B,C三個(gè)頁面,A頁面包含B頁面,B頁面包含C頁面.A頁面隨著B頁面自適應(yīng),C頁面隨著B頁面自適應(yīng),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-09-23

