说一说window.parent
<iframe>标签是很常用的,嵌在页面之中,可以做独立的加载和刷新。比如说,页面分左右或者上下结构,一般左侧和上侧是导航部分,右侧和下侧是目标页面的展示部分,只需要设置导航链接的target属性等于右侧iframe的name属性即可。
有一个需求,当session超时之后,无论点击任何的链接,都要使整个页面跳转至登陆页面。
以前未接触框架的时候,一般使用过滤器Filter来实现,过滤所有的url,当然对于登陆和退出的url不进行拦截,如果session不存在就重定向至登陆页。
接触struts2之后,就是用全局拦截器,拦截符合条件的url,依然是对session进行判断,看一看session里面的信息是否符合放行的条件。
现在是springmvc,拦截器与struts2原理基本一致,只不过本项目需要考虑的东西稍微多一些而已,但本文不对拦截器进行详细阐述。主要说一说window.parent。
如本文第一段所述,点击有target的链接,页面就会指向iframe,当session超时之后,点击链接依然如此,那么iframe里的页面会跳转至登陆页,整个页面却是不动的,这样我们就需要在登陆页中判断一下,该页面是否存在父页面,如果存在就把该登陆页的url赋给父页面。
然而,window.parent总是不为空,window.parent.location也是不为空,如果直接进入登陆页(其本身没有iframe),window.parent.location就是其自身。这样就区分不出登陆页是否有父页面了?当然了,通过解析window.parent.location的不同是可以区分出来的,但是这个太低端,不是本文讨论的重点。
问题的集中点在于,登陆页它是否存在于某个iframe里面,或者他的父页面中是否存在iframe,这个如何做呢?
偶然看到window.parent.frames,这个是获得父窗口的所有集合,如果window.parent.frames.length>0说明存在iframe,否则不存在,这样可以区分出登陆页面是否嵌在iframe中。但总觉得通用性不够,依然显得低端。
仔细观察,发现window.parent依然是一个window,也就是说是一个window对象,那么window对象之间可以不可以实现比较呢?比如说:window.parent==window我们想拿它的父窗口和他的当前窗口进行比较,会不会出错呢?多说无用,试试就知道了。
1,登陆页自己alert(window.parent==window);返回true。
2,登陆页嵌在iframe中;返回false。
说明我们的猜想是正确的,没有问题,这样我们就可以区分出登陆是否存在父页面了,而且各种情况都通用。
说一说window.parent的更多相关文章
- 关于 window.parent, window.top, window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口,opener是用open方法打 ...
- WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION 图片上传
CKEDITOR 编辑器 图片上传 WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION (CKEditorFuncNum,图片路径,返回信息); CKEditor ...
- Javascript 中的window.parent ,window.top,window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...
- window.parent与window.openner区别介绍
今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href"."locati ...
- window.parent 与 window.opener
window.parent针对iframe,window.opener针对window.open 父页面parent.jsp: <%@ page language="java" ...
- Js中的window.parent ,window.top,window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...
- JS中iframe相关的window.self,window.parent,window.top
window.self指的是当前窗口:他等价于window,self,window.self window.top指的是最顶层的窗口(有些页面可能会嵌套好几个iframe)如果只有一个窗口,那么就返回 ...
- window.parent
今天出现了一个严重的bug,页面在载入时居然导致了页面崩溃,找了近5个小时的代码,才找到了原因(擦,我只能说我水平有限,浪费了太长时间了~). 源代码: var curr = window; whil ...
- window.parent ,window.top,window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...
- JavaScript中,window.opener是什么?window.parent和window.opener有啥区别?
来自CSDN的问答: window.opener是什么啊? ++++++++++++++++++++++++++++++++++++++++++++++++++ 弹出本窗体的句柄 比如你想点一个按钮直 ...
随机推荐
- Codeforces Round #327 div2
Problem_A(591A): 题意: 有一段长度为l的路,两个人分别在两个端点,1, l. 现在已知每个人的速度为p,q. 求第一个人(初始位置在1)在他们第二次相遇的时候的位置. 当他们相遇的时 ...
- ORACLE VS MYSQL
ORACLE VS MYSQL 一.历史 1. Oracle: 中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学 ...
- C#.NET连接mysql方法
C#访问MySQL数据库的方法 (1)首先需要下载C#访问MySQL数据库的ADO.NET驱动程序 下载地址为: http://dev.mysql.com/downloads/connector/ne ...
- BZOJ 3993 [SDOI 2015] 星际战争 解题报告
首先我们可以二分答案. 假设当前二分出来的答案是 $Ans$ ,那么我们考虑用网络流检验: 设武器为 $X$,第 $i$ 个武器的攻击力为 $B_i$: 设机器人为 $Y$,第 $i$ 个机器人的装甲 ...
- 基于协同过滤的个性化Web推荐
下面这是论文笔记,其实主要是摘抄,这片博士论文很有逻辑性,层层深入,所以笔者保留的比较多. 看到第二章,我发现其实这片文章对我来说更多是科普,科普吧…… 一.论文来源 Personalized Web ...
- BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理
Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the fa ...
- Yahoo! Logo ASCII Animation in 462 bytes of C
Last week I put together another obfuscated C program and have been urged by my coworkers to post it ...
- 为 UWP 应用提供的 .NET 网络 API
[编者按]本文作者是 Windows networking 团队项目经理 Sidharth Nabar.在微软 Build 2015 大会上,.NET Core 5 作为开发 UWP(Universa ...
- 转载:redis备份策略
Redis提供了两种持久化选项,分别是RDB和AOF. 默认情况下60秒刷新到disk一次[save 60 10000 当有1w条keys数据被改变时],Redis的数据集保存在叫dump.rdb一个 ...
- MMU、Icache、Dcache
http://blog.csdn.net/iodoo/article/details/8954014 i-cache(instruction cache)是指令高速缓冲存储器. Cache存储体:存放 ...