当咱们使用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