窗口框架重定向主页的问题这是一个简单的开发笔记,用于记录最近碰到的一个问题和处理方式。文中讨论了如何将框架中页面的重定向
这是一个简单的开发笔记,用于记录最近碰到的一个问题和处理方式。
大致的情况是这样的。有一个比较老的系统,使用了inframe技术,主窗口在外,然后使用菜单和链接项目,来控制子窗口中的内容和操作。这种方式的优点就是实现起来比较简单,各种功能的模块化比较容易实现。是典型的Web Page时代的一种应用架构方式。
但这个技术方案也有很多问题,特别是跨窗口互动和协作的问题。笔者在现实工作中,就遇到这么一种情况。有一个典型的管理类的Web应用系统,由于页面内容是由后端动态生成和控制的,当用户请求的会话失效的时候(找不到合适的用户标识,或者Session超时),将会重定向到首页(登录页面),来要求重新登录。
这个处理在一般的页面上,没有太大的问题。但对于业务内容操作而言,它们很有可能在主应用程序的inframe框架当中进行重定向回到首页,就出现了尴尬的“主页套主页”的情况。由于这个重定向的操作,是在后端控制器的拦截器机制中自动处理和输出的,它并不知晓当前页面是在框架当中。所以,从后端而言,是不太好处理的。
经过一段时间的研究和思考,笔者打算从前端着手处理这个问题。方法是在前端主页HTML的Header内容中,加入如下的JS代码:
// 判断Home是主窗口
if (window.self !== window.top && ["/",""].some(p=> p=== window.location.pathname)) {
window.top.location.href = window.location.href;
}
这段代码的简单原理是:
- 首先判断当前页面是主页面还是框架中的页面
- 然后判断当前页面是否是应用的主页(地址)
- 这里简单的使用了根路径,也和应用的实际情况匹配
- 如果需要重定向,则设置top的地址,这时整个页面和窗口都会重定向到目标地址
需要理解和注意,这个解决方案,可能是最简单的,但有可能不是最好的。如果有完善的前后端分离的机制,应当由端口返回的信息状态作为页面重定向的依据和发起。这种处理方式,相当于重新加载了两次主页,有一定的性能代价。
转载自:https://juejin.cn/post/7423298788872699958