`
qepipnu
  • 浏览: 76553 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

window.opener 与 window.parent 的区别

阅读更多
我们如果要用到iframe的值传到另一框架就要用到
window.opener.document.getElementByIdx(name).value = uvalue;这种形式哦。
window.parent能获取一个框架的父窗口或父框架。顶层窗口的parent引用的是它本身。

可以用这一点特性来判断这个窗口是否是顶层窗口。如:

Code
function IsTopWindow( win )
{
    if( win.parent == win ) return true;
    else return false;
}
window.opener引用的是window.open打开的页面的父页面。


opener即谁打开我的,比如A页面利用window.open弹出了B页面窗口,那么A页面所在窗口就是B页面的opener,在B页面通过opener对象可以访问A页面。
parent表示父窗口,比如一个A页面利用iframe或frame调用B页面,那么A页面所在窗口就是B页面的parent。
在JS中,window.opener只是对弹出窗口的母窗口的一个引用。比如:

a.html中,通过点击按钮等方式window.open出一个新的窗口b.html。那么在b.html中,就可以通过 window.opener(省略写为opener)来引用a.html,包括a.html的document等对象,操作a.html的内容。假如这个引用失败,那么将返回null。所以在调用opener的对象前,要先判断对象是否为null,否则会出现“对象为空或者不存在”的JS错误。

window.opener 返回的是创建当前窗口的那个窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为“name”的textbox中,就可以写为:
window.opener.document.getElementByIdx("name").value = "输入的数据";




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



window.parent.location.reload()
让打开这个窗口的父窗口刷新,然后本子窗口关闭!

window.parent.HideThisDiv()
应该是让打开这个窗口的父窗口的某个DIV影藏

javascript:history.back()
就是后退啊!和浏览器里面的后退按钮一样!javascript:history.back(-1)就是后退一页 



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



前边用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://angel1949.blogcn.co...
}

<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:
分享到:
评论

相关推荐

    showModalDialog open弹出子窗口操作parent、opener父窗口及跨域处理

    3&gt; IE与FireFox对两个弹出窗口在跨域时的解析也有不同:通过window.dialogArguments操作父窗口时,在IE下不需要指定document.domain而在FireFox下则正好相反需要指定才能生效;采用opener方式操作父窗口时都不需要...

    jsp 刷新父页面

    window.opener.location.href = window.opener.location.href 刷新以winodw.showModelDialog()方法打开的窗口 window.parent.dialogArguments.document.execCommand('Refresh'); 或 Response.Write("&lt;script&gt;...

    parent和opener的区别

    #### `parent`与`opener`的区别 尽管`parent`和`opener`都是指向其他窗口的引用,但它们之间存在明显的区别: - **`parent`**: - 指的是当前窗口所在的父窗口,不一定是打开当前窗口的窗口。 - 如果当前窗口...

    刷新父窗口的多种方法

    这里`self`是指向当前窗口的引用,因此`self.opener`与`window.opener`具有相同的效果。 #### 2. 子窗口刷新父窗口 除了通过弹出子页面来刷新父窗口外,还可以通过子窗口本身来刷新父窗口。这种情况下,子窗口通常...

    window.location.href页面跳转的用法(区别于redirect)

    本文将详细介绍如何使用`window.location.href`进行页面跳转,并探讨它与`Response.Redirect`的区别。 #### 使用场景 假设在一个ASP.NET项目中,当用户完成某个操作(例如注册账号),我们希望在显示一个提示信息...

    window.parent与window.openner区别介绍

    1. 应用场景:`window.parent` 适用于处理iframe嵌套,而`window.opener` 用于新窗口与创建它的窗口之间的交互。 2. 直接关系:`window.parent` 直接指向当前窗口的父窗口,而`window.opener` 指向打开当前窗口的...

    解析jquery获取父窗口的元素

    (“#父窗口元素ID”,window.parent.document); 对应javascript版本为window.parent.document.getElementByIdx_x(“父窗口元素ID”);取父窗口的元素方法:$(selector, ...$(selector, window.opener.document);$(s

    window.open打开新窗口,不被拦截的方法

    &lt;body onload="window.parent.opener=null;window.close();"&gt; ``` 这段代码的作用是在页面加载完成后立即关闭当前窗口。需要注意的是,这种方式可能也会受到浏览器的弹出窗口拦截机制的影响。为了确保兼容性更好...

    js中opener与parent的区别详细解析

    - **同源策略限制**:与window.opener类似,window.parent同样受到同源策略的限制。除非两个页面具有相同的协议、域名和端口号,否则不能直接操作父窗口的DOM内容。 ### 实例应用 在实际应用中,当需要从子窗口向...

    window.open

    这段脚本首先检查`window.opener`是否为`null`,如果不是,则打开一个新的窗口并加载指定的URL。这里还包含了一些窗口特性的设置,如不允许工具栏、地址栏等,同时设置了窗口的位置和尺寸。最后,如果当前窗口的...

    JS子窗口调用父窗口

    为了实现这一目的,JavaScript提供了几个内置属性来帮助完成这类操作,主要包括`window.parent`和`window.opener`。 #### 二、`window.parent`的使用 ##### 2.1 `window.parent`的定义 `window.parent`属性返回...

    js中opener与parent的区别详细解析.docx

    ### JavaScript中的`opener`与`parent`的区别详解 #### 引言 在JavaScript中,`opener`和`parent`都是与浏览器窗口交互时常用到的属性。它们分别指向了不同的窗口对象,并且有着各自特定的应用场景。本文将详细介绍...

    js window.open iframe dialog

    例如,通过`window.opener`对象,子窗口可以访问到打开它的父窗口,而`iframe`内的脚本可以通过`parent`对象与父页面通信。 - 父窗口调用子窗口: ```javascript let newWindow = window.open('...'); newWindow....

    js弹出窗口返回值

    - 当存在多个嵌套窗口时,可以通过`window.opener.parent`来访问上一级窗口,甚至通过连续的`parent`属性访问更上级的窗口。 2. **刷新页面**: - 有时候需要在关闭弹窗后刷新主窗口。这可以通过以下方式实现: ...

    js模式化窗口问题![window.dialogArguments]

    在子页面中通过`window.parent.dialogArguments`来传递数据,然后关闭对话框。 b. 如果不想增加额外的页面,可以使用`window.opener.document`对象。在IE中,可以通过`window.dialogArguments`访问父窗口,而在...

    JS刷新父页面 父窗口

    1. **`window.opener`与`window.parent`的区别**: - `window.opener`:指的是打开当前窗口的窗口对象。只有当一个窗口是由另一个窗口通过`window.open()`打开时,该窗口才有`opener`属性。 - `window.parent`:指...

    javascript刷新父页面

    这里假设父窗口有一个名为 `frameName` 的框架,可以通过 `window.opener.frames[frameName]` 来访问它,然后使用 `location.reload()` 方法来刷新该框架。 #### 四、示例代码分析 在提供的示例代码中,我们可以...

    DevExpress 使用心得

    在使用 JavaScript 调用父窗口或父页面的方法时,我们需要区分 window.parent 和 window.opener 的区别。 window.parent 是 iframe 页面调用父页面对象,而 window.opener 是 window.open 打开的子页面调用父页面...

Global site tag (gtag.js) - Google Analytics