博客统计信息

51cto推荐博客
用户名:dannyy1026
文章数:196
评论数:316
访问量:217835
无忧币:1919
博客积分:3030
博客等级:7
注册日期:2007-08-13

我的技术圈(4)

更多>>
关于IE下opener属性易变的解决方案
2009-12-09 21:46:49
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dannyyuan.blog.51cto.com/212520/240940
关于IEopener属性易变的解决方案
我们在父窗口和子窗口之间通常用childl = window.open(pageUrl,’WindowTitle’,'left='+winLeft+',top='+winTop+',height='+winHeight+',width='+winWidth+',scrollbars=yes,resizable=yes');
childl.focus();来实现弹出窗口作选择子模块。
在子窗口中用opener来实现对父窗口的引用。不过我在最近一个项目用该方法实现对父窗口的JSCRIPT中数组进行填充时,发现opener工作不稳定,反复做几遍就可能出现opener无效的情况,这种情况还只在IE中出现,在FF中没出现过。经网络上搜索,有高人说IE是用类似RPC的机制来实现浏览窗口的通信机制的,如果窗口重复打开几遍(即便是每次都执行了关闭),可能会导致子窗口保存的opener是一个僵尸句柄。经过若干天的实验,无法实现突破,最后我灵机一动,何不用model window来实现,这样句柄易变而导致僵死的可能不就不存在了吗?再说,FF3我试了也支持showModalDialog了,跨平台问题也不存在了。
经过改写,
var ret=window.showModalDialog(pageUrl,new Array(Arr1, Arr2),'dialogLeft:'+winLeft+'px;dialogTop:'+winTop+'px;dialogHeight:'+winHeight+'px;dialogWidth:'+winWidth+'px',false);
if (ret ==null) {//
没有选择就关闭
return;
}
Arr1 = ret[0];
Arr2 = ret[1];
其中showModalDialog方法的第二个参数可实现父窗口JSCRIPT数据对象传入子窗口,在子窗口对window.dialogArguments属性进行引用实现读取传入的参数。示例代码如下:
var ArrTemp1 = window.dialogArguments[0];
子窗口选择好返回前只需对windowreturnValue属性赋值即可实现数据传递回父窗口了。示例代码如下:
window.returnValue = new Array(ArrTemp1, ArrTemp2);
window.close();
这样,模态子窗口(对话框)的引入实现了单线程方式,就能让该功能稳定运行了。
Tips:
1.两个方法openshowModalDialog的窗口位置和大小的参数格式不同。Openleft=num1,top=num2,width=num3,height=num4,scollbars=yes|no,resizable=yes|no,而showModalDialog是用dialogLeft:num1px;dialogTop:num2px;dialogWidth:num3px;dialogHeight:num4px
2Open方法的第二个参数是子窗口标题,我试过其中不能出现空格,否则IE下会出现参数错误。花了很长时间才找到的哦!

本文出自 “守望者的技术日记和六..” 博客,请务必保留此出处http://dannyyuan.blog.51cto.com/212520/240940

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:技术小结技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2009-12-10 13:26:15
虽然没怎么懂 但是看出来颇费心思 

2009-12-16 12:49:37
很好 很强大!

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: