2006/8/10
window.opener浅析(续网页无提示自动关闭) (转)
前边用window.opener=null来完成了窗口的无提示自动关闭.简单查了一下,window.opener是js中window的一个属性,它返回的是打开当前窗口的窗口对象.如果窗口A弹出一个窗口B,那么在B中window.opener就是窗口对象A.
这是JAVASCRIPT参考手册里对于opener的描述
When a source document opens a destination window by calling the open method, the opener property specifies the window of the source document. Evaluate the opener property from the destination window.
This property persists across document unload in the opened window.
You can change the opener property at any time.
You may use Window.open to open a new window and then use Window.open on that window to open another window,and so on. In this way, you can end up with a chain of opened windows, each of which has an opener property pointing to the window that opened it.
Communicator allows a maximum of 100 windows to be around at once.If you open window2 from window1 and then are done with window1, be sure to set the opener property of window2 to null. This allows JavaScript to garbage collect window1. If you do not set the opener property to null, the window1 object remains, even though it's no longer really needed.
我大概翻译一下
当一个窗口用open方法打开了一个新窗口的时候,opener属性就生效了,直到被打开的窗口关闭时失效.
你可以通过opener在被打开的窗口中对父窗口进行一系列操作.
你可以在一个窗口中打开一个新窗口,新窗口又打开另外一个新窗口,新窗口又打开另外一个新窗口.....最后得到的是一串新窗口:em215:,然而每一个窗口的opener属性都指向打开它的那个窗口.
设计者最多允许打开100个这样的窗口.当你通过open打开了一个新窗口后,确保在新窗口中将opener属性设置为null(空).如果不这样的话,会使浏览器持续的保留每个opener的值,直至资源耗尽.
JS参考手册还给出了几个例子,我把我理解的部分演示一下~
首先建立1.htm,它用open方法打开2.htm,代码如下
<script language="JavaScript">
window.open('2.htm', ', 'width=225,height=235,resizable=1,scrollbars=auto');
建立2.htm,写入这些
<script language="JavaScript">
function ccc()
{
window.opener.document.bgColor='red';
}
function xxx()
{
window.opener.document.location='http://www.no1edu.com'}
<input type="submit" name="Submit" value="变色" onClick="ccc()">
<input type="submit" name="Submit1" value="转向" onClick="xxx()">
打开1.htm我们会看到弹出的2.htm,点击2.htm中第一个按钮,1.htm的背景颜色变为了红色,点第二个按钮,1.htm被重定向到了指定的网址.这里通过2.htm来控制1.htm的行为正是利用了opener.
JS参考手册的描述中一再强调open动作完成后将opener设置为空,也就是window.opener=null,但是哪也没说它有关闭窗口时不提示这么个用法啊.比较前篇中父子窗口自动关闭的代码会发现,子窗口中是不需要把window.opener设置为空也可以无提示自动关闭的,而父窗口必须有这一句.关于window.opener在无提示关闭窗口的作用,是不是可以这么解释,浏览器认为子窗口与父窗口的优先级是不同的,子窗口可以随意关闭而父窗口可能有比较重要的内容而需要用户同意才可以关闭;当window.opener=null的时候,父窗口失去了原来的优先级,被浏览器认为是一个普通的窗口,所以可以象子窗口一样不需要提示而自动关闭了:em29:
没学过JS,临时找点资料来看,不知道对于opener在关闭窗口时的作用解释的是否准确.但是通过这个了解了opener的用法也是不错的嘛~