代码改变世界

window.opener

2015-03-09 16:14  hf_sun  阅读(139)  评论(0编辑  收藏  举报

window.opener 实际上就是通过window.open打开的窗体的父窗体。

比如在父窗体parentForm里面 通过 window.open("subForm.html"),那么在subform.html中 window.opener

就代表parentForm,可以通过这种方式设置父窗体的值或者调用js方法。

如:1,window.opener.test(); ---调用父窗体中的test()方法

    2,如果window.opener存在,设置parentForm中stockBox的值。

    if (window.opener && !window.opener.closed) {

       window.opener.document.parentForm.stockBox.value = symbol;

}

 

1>window.opener 的用法

在一般的用法中,只是用来解决关闭窗口时不提示弹出窗口,   而对它更深层的了解一般比较少。其   实   window.opener是指调用window.open方法的窗口。      在工作中主要是用来解决部分提交的。这种跨页操作对工作是非常有帮助的。 如果你在主窗口打开了一个页面,并且希望主窗口刷新就用这个,打开页面的window.opener就相当于 主窗口的window。

主窗口的刷新你可以用 window.opener.location.reload(); 如果你用虚拟的目录:如struts的*.do会提示你重试

你可以改成这样 window.opener.yourformname.submit() 就好了

2〉

在应用中有这样一个情况, 在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口

function closeWin(){        

  hasClosed = true;         

window.opener.location="javascript:reloadPage();";         

window.close();      }     

function window.onbeforeunload(){         

if(!hasClosed){             

window.opener.location="javascript:reloadPage();";       

   }     

}

上面的代码在关闭B窗口的时候会提示错误,说缺少Object,正确的代码如下:

function closeWin(){         

hasClosed = true;         

window.opener.location="javascript:reloadPage();";         

window.opener=null;         

window.close();     

}     

function window.onbeforeunload(){         

if(!hasClosed){//如果已经执行了closeWin方法,则不执行本方法             

window.opener.location="javascript:reloadPage();";        

  }     

}

reloadPage方法如下:

function reloadPage() {      

    history.go(0);         

document.execCommand("refresh")         

document.location = document.location;         

document.location.reload();      }

PS:由于需要支持正常关闭和强制关闭窗口时能捕捉到事件,用了全局变量hasClosed

==============================================

补充,在父窗口是frame的时候在刷新父窗口的时候会出现问题:

The page cannot be refreshed without resending the information. 后修改如下: window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href; 不需要执行自带的reload()方法,注意,不要再画蛇添足加上这一句:

window.opener.parent.document.frames.item('mainFrame').location.reload();

======================================================================================== 最后,为了同时支持刷新普通父窗口和frame父窗口,代码如下:

function closeWin() {         

hasClosed = true;     

}