鸟食轩
Microsoft .NET[C#] MVP 2003
随笔 - 332, 文章 - 870, 评论 - 5722, 引用 - 356
使用unknown类型判断当前窗口类型
ASP.NET给我提供了多种页面认证模式,由于集成认证对于客户端的部署有较高的要求,在很多情况下我们可能不能良好部署。而Passport认证模式,对于企业应用我真不知道有没有使用的,要你把安全寄托于第三方,会是什么感觉呢?所以Form认证就算是相对有用的一种认证解决方案了。
使用Form认证,当认证超时后会自动跳转到我们定义的login页面,并且在重新登陆后我们可以返回原超时页面。在一般的情况下,这也算是一种比较不错的用户的体验了,不过Form认证的这种自动处理机制有时也会给我们带来麻烦。就是当我们在系统中使用Modal Dialog后,问题就来了。
如果我的页面A是一个普通的页面,在其上可以通过按钮或链接开启Modal Dialog B页面。这时候如果Form认证的登陆已超时,我们点击A页面启动B。郁闷的问题就来了,Form认证自动定向的login页面就跑到Modal Dialog B里面去了
。管它的呢,就在Modal Dialog里面登陆呗,新的问题又来了,重定向回A页面的时候,IE又开启新的窗口了,真是乱七八糟。在login页面中加上<base target=_seft>,这下好了,新的IE窗口不出来了,重定向回去的A页面就呆在Modal Dialog里面了,再次晕。
如果我们能在login页面判断但前的窗口类型,我们就能给用户一个友好的提示,告诉用户本次登录已超时,并要求用户登陆login页面进行再次登录就行了。那么我们能判断出页面所处的窗口的类型吗?这个确实是一个挺无理的要求,因为不管window对象的方法:open、showModalDialog和showModelessDialog所开启的新窗口都是一个完备的Window的对象实例。window对象该有的属性,它们都一个不撂下统统具有。仔细研究,这几个方法还是会影响window对象的属性,其中open比较好判断的一个,因为使用open开启的窗口,新窗口的window.opener会指向它的父窗口。而showModalDialg和showModelessDialog开启的新窗口的window.opener总是undefined。但是对于正常的follow link,新页面的window.opener也同样是undefined。如果点击链接新开起IE窗口(不管是shift+click,还是target=_blank),其新窗口的window.opener和window.open后一样,是指向其父窗口。
似乎已经山重水复疑无路了,不过还好想起showModalDialog和showModalessDialog后我们常常会使用到的window属性dialogArguments,看看它是什么值呢?当然如果我们在使用showXxx时给第二个参数赋值,那么新窗口中的window.dialogArguments就是这个所赋予的值了。似乎可以使用这个参数的有无来判断我们启动的窗口是不是Modal Dialog,不过这个方法太依赖于具体的实现,就是不管什么情况必须给Modal Dialog传参数,感觉风险挺大的。如果我们不给showXxx的第二个参数赋值,那么会是什么情况呢?首先想到八成是undefined或者null了。可是当我们在Modal Dialog里面执行typeof(window.dialogArguments)后,我们意外的发现,结果是:
unknown
类型!于是马上看open方法开启的新窗口,执行typeof(window.dialogArguments)的结果却是:
undefined
。
最后终于柳暗花明又一村了,有这个Modal Dialog中的unknown类型和普通IE窗口中的undefined类型,我们就可以不强制传递和依赖任何参数标识,而确切的知道目前页面所在的窗口的类型,是普通的IE窗口还是模态(Modal或Modaless)窗口了~~
检测代码如下(不过不能区分Modal和Modaless):
<
script
language
="javascript"
>
var
type
=
typeof
(window.dialogArguments);
var
openerType
=
typeof
(window.opener);
if
( type
!=
'undefined'
&&
openerType
==
'undefined' )
{
alert('The page is loaded
in
a Modal or Modaless window.');
}
else
{
alert('The page is loaded
in
a normal IE window.');
}
</
script
>
这个检测在IE 6.0 sp2中通过,但不知道这个unknown类型是什么时候引入到脚本对象中的。如果你有兴趣并使用IE 6.0以下版本,希望您能测试一下本方法并告知测试结果和IE版本号。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2005-08-24 00:18
birdshome
阅读(4232)
评论(4)
编辑
收藏
评论
241383
#1楼
[
楼主
]
回复
引用
查看
Test.htm
<
html
>
<
body
>
<
button
onclick
="hehe()"
>
click
</
button
>
<
script
language
="javascript"
>
function
hehe()
{
window.showModalDialog('pop.htm');
window.showModalDialog('pop.htm', 'abc', '');
window.open('pop.htm');
window.showModelessDialog('pop.htm');
window.showModelessDialog('pop.htm',
new
Object(), '');
}
</
script
>
<
a
href
="pop.htm"
target
="_blank"
>
pop
</
a
>
</
body
>
</
html
>
pop.htm
<
html
>
<
body
>
<
script
language
="javascript"
>
var
count
=
0
;
for
(
var
key
in
window )
{
document.write('window.'
+
key
+
'
=
'
+
typeof
(window[key])
+
'
<
br
>
');
count
++
;
}
document.write(count
+
'
<
hr
>
');
document.write('window.opener
=
'
+
typeof
(window.opener)
+
'
<
br
>
');
document.write('window.dialogArguments
=
'
+
typeof
(window.dialogArguments)
+
'
<
br
>
');
document.write('window.abc
=
'
+
typeof
(window.abc));
</
script
>
<
script
language
="javascript"
>
var
type
=
typeof
(window.dialogArguments);
if
( type
!=
'undefined' )
{
alert('The page is loaded
in
a Modal or Modaless window.');
}
else
{
alert('The page is loaded
in
a normal IE window.');
}
</
script
>
</
body
>
</
html
>
2005-08-24 10:16
|
birdshome
#2楼
回复
引用
在windows 2003, IE6.0 sp1下没有问题。
2005-08-24 12:46
|
alada[未注册用户]
#3楼
回复
引用
看起来你这个办法还是不得不依赖传递的参数, 你依赖的是不传递类型为 undefined 的参数。
unknown 类型伴随着 ActiveXObject() 出现,其返回值就是此类型。
还不如判断 typeof window.dialogWidth 呢, 如果是 string 就判断是 dialog。(未经详测, 且依赖于你没有在普通窗口里设一个同名的属性)
2005-08-25 11:00
|
modico[未注册用户]
#4楼
回复
引用
very very good ! thank you!!!!!
2005-09-21 17:29
|
tigerjacky[未注册用户]
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
最想要的Entity Framework功能
·
专访Jeffrey Richter:Windows 8是微软的重中之重
·
《福布斯》:谷歌进军硬件产品 难撼动苹果地位
·
美国空军拟最多购买1.8万台iPad 2
·
分析称专利之争让谷歌苹果两败俱伤
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
导航
博客园
首页
新随笔
联系
订阅
管理
公告
Invert
原创
技术文章和心得,
转载
必须注明来源
"博客园"
!
贴子以"现状"提供,且没有任何担保,同时也没有授予任何权利。
昵称:
birdshome
园龄:
7年10个月
荣誉:
推荐博客
粉丝:
73
关注:
3
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签
Nokia 6300
(2)
fan
(1)
qq
(1)
腾讯
(1)
输入法
(1)
隐私
(1)
随笔分类
(337)
.NET的私有工具类(2)
(rss)
.NET技术开发相关(34)
(rss)
Asp.net控件开发(14)
(rss)
Debug中的滑铁卢(9)
(rss)
Enjoy Computer :)(27)
(rss)
Jscript&Dhtml开发(162)
(rss)
技术区里的非技术(49)
(rss)
开发中遇到的虫子(14)
(rss)
其它编程相关内容(16)
(rss)
商务智能(BI)开发(10)
(rss)
文章分类
(147)
北京的幸福生活(29)
(rss)
不得不转载(19)
(rss)
乖乖的文章(6)
(rss)
那时还没有blog(4)
(rss)
那是相当八卦(10)
(rss)
手机短信息(1)
(rss)
我们的文章(40)
(rss)
珍贵照片的背景(4)
(rss)
重庆的幸福生活(34)
(rss)
相册
2005 Kick Off @ 涞滩
2006 Kick Off @ 钓鱼城
2006 Offsite @ 四面山
2006 Wedding @ 昆明
2007 Marriage @ 哈尔滨
2007 Offsite @ Thailand
2007 Offsite @ 海南云天
2007 Training @ Seattle
2007 Travelling @ 云南
2008 Travelling @ 天津
乱七八糟的收集
Ex-Colleagues
Jason Lei's Space
.Net Life
(rss)
Jasper
(rss)
Michelles Space
xingd.net
(rss)
玻璃缸
(rss)
短鲷生活
海阔天空
录一室
(rss)
完美的泡菜
(rss)
怡红公子
(rss)
竹叶尖的BLOG
常用链接
Engadget 中文版
PDFCHM eBooks
SitePoint Forums
The Code Project
安利上海直销店
哈尔滨工业大学
哈工大紫丁香
海归论坛
(rss)
沙坪坝区中医院
兄弟情深
没有可乐的日子
葡萄树下不乘凉
(rss)
斯普特尼克
猪头小队长
(rss)
积分与排名
积分 - 3145044
排名 - 6
最新评论
阅读排行榜
推荐排行榜