【原创】iframe页的登录失效时,如何直接父页面刷新到登录页

今天一个网友“乁乁辉”在群里提到一个问题,说登录超时后返回登录页会在iframe里打开,并且给了解决的js代码。其实我之前也知道有这个问题,问题如下图所示:

【原创】iframe页的登录失效时,如何直接父页面刷新到登录页

但是倒也没直接就去解决,感觉这个问题倒还好,不是那么严重,就没花精力去处理。正好这位热心的网友给了我解决的代码了,我想那就直接用上吧,网友的代码如下:

【原创】iframe页的登录失效时,如何直接父页面刷新到登录页


其实就是一个iframe父子窗口判断操作的代码了,当判断出来登录失效时执行一下。本来问题这样就算解决了吧,但是我就是喜欢再进一步:如果我在每个iframe里都加这么一段不是有点不太方便嘛,虽然可以做到公用的js里页面来调用,但是,像【我的主页】这个页面,没有调用任何js,如果只为了解决这个问题而专门加个js,总觉得不够高明吧。那就还有个办法,我感觉更好一点,就是在生成iframe的地方,动态的在iframe的document的body里追加一个<script>,这样只要控制住生成iframe的地方,所有在那里生成的iframe都是没有登录失效显示问题的。


动态生成iframe的代码在loadiFrame函数里,在iframe.load(function(){......}里,动态的追加上判断该窗口是否是后台登录页的判断,如果是登录页,说明登录已经失效了,要将top窗口刷新到登录页,逻辑其实很清楚,但这里我遇到一个不能理解的问题,本来我是这么写的:

【原创】iframe页的登录失效时,如何直接父页面刷新到登录页

调试发现这样写document竟然是top父窗口的document,也就是说代码是追加在iframe里的body里的,但是alert(document.URL)竟然是父窗口的,而且用浏览器查看源码是看不到这一段的,用浏览器查看元素时才能看到。我想可能是因为iframe.load是在父窗口里执行的吧,反正有点理解不能,希望有知道的网友能给解惑一下。后来没办法,调试了一下,发现用下面这样的写法就可以了:

【原创】iframe页的登录失效时,如何直接父页面刷新到登录页

[0]是把jquery的元素转为js的元素,doURL就是子窗口的document了,这样就算差不多用一个更省心的方式解决了这个问题。