子窗口和父窗口之间杂谈

本案例是我在民主测评项目中实际遇到的,在Organtag.jsp中需要刷新vote.jsp

批量移交,在vote.jsp页面选择了大量的人员,通过post提交到后台,然后弹出

zhongjianAdmin.jsp,在此页面选择中间管理员,然后通过AJAX提交,返回一个

结果,用户点击确认之后,刷新vote.jsp,然后关闭自己

在上面的两个案例中的会出现这样的问题,如果在vote.jsp中通过js中的window.open打开子窗口一般会被浏览器阻止,所有不应采用

这种方法.当时为了避免被阻止就采用上面的案例中的模式,通过form表单提交到后台,然后再跳转到一个新的页面,其实这样有的时候也会被

浏览器阻止,但是浏览器给出阻止提示.后台通过从交互设计的那里了解到,对于弹出窗口类似问题可以采用的DIV弹出.

在保障服务中的订餐系统采用了上述利用DIV弹出窗口的形式,使用了ajaxAnywhere控件(姑且这么称呼)局部刷新,这样就解决了浏览器

阻止小窗口的问题.

另外一个问题就是子窗口(这里的子窗口指的是Organtag.jsp和zhongjianAdmin.jsp)刷新父窗口vote.jsp,如果直接使用下面语句刷新,

// self.opener.location.reload(); // 刷新父窗口

// window.opener.location.href=window.opener.location.href;

浏览器会弹出这样的窗口(在IE6中大多时候会出现)

和同事的讨论,认为是因为采用了post提交的方式引起的,如果采用get方式就不会引起这个问题(未验证),那么怎么避免这个弹出窗口呢?

在Js中使用这样的语句:

// window.parent.opener.ec.submit();(案例一)

// window.parent 是获得当前页面的框架,opener是获得弹出这个框架的页面或者框架的引用,这里的刷新实际上是刷新整个vote.jsp

// vote.jsp也有可能是一个框架

// window.opener.ec.submit();(案例二)

// 理解了第一条语句,第二条语句就很好理解了,因为第二案例的子窗口没有在框架中,所有直接通过opener获得了打开自己的窗口

这里的原理就是提交父窗口的form,在jsp页面中的使用的是ec:table

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值