详细请参考http://www.cnblogs.com/jinianjun/archive/2012/07/29/2614229.html
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.opener是指调用 window.open方法的窗口。在工作中主要是用来解决部分提交的。这种跨页操作
对工作是非常有帮助的。如果你在主窗口打开了一个页面,并且希望主窗口刷新就用这个,打开页面的window.
opener就相当于主窗口的window。主窗口的刷新你可以用window.opener.location.reload();如果你用虚拟
的目录:如struts的*.do会提示你重试,你可以改成window.opener.yourformname.submit(),这样就好了。
2、在应用中还有这样一个情况,在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口
代码如下:
function closeWin(){
window.opener.location="javascript:reloadPage();";
window.opener=null;
window.close();
}
function window.onbeforeunload(){
window.opener.location="javascript:reloadPage();";
}
}
reloadPage方法如下:
function reloadPage() {
history.go(0);
document.execCommand("refresh")
document.location = document.location;
document.location.reload();
}
3.window.opener 返回的是创建当前窗口的那个窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,
然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为“name”的textbox中,就可以写为: window.opener.document.getElementById("name").value = "输入的数据";
对于javascrīpt中的window.opener没有很好的理解。
为什么框架中不能使用,弹出窗口的父窗口不能在框架里面的某个页面呢?那怎样通过弹出窗口操作框架中的父窗口呢?
opener.parent.frames['frameName'].document.all.input1.value 试试这个:)
众所周知JavaScript中:
var win = window.open(url,windowName,...); 的使用,
而win.opener则是指向父窗口的引用
然而,有种情况却比较特别,
假如有两个窗口window1和window2
按下列步骤执行:
var win = window.open(url,windowName,...);// (window1)
var win = window.open(url,windowName,...);//(window2)
其中先后这两次打开的子窗口的windowName一样
此时你会发现在window2中的win.opener却不是指向window2的,却是指向window1.
如果你想在子窗口关闭父窗口的话,就不正确了,因此可以修改上面的执行方法为:
var win = window.open(url,windowName,...);? (window1)
win.opener = window;
var win = window.open(url,windowName,...);? (window2)
win.opener = window;