window.parent ,window.top,window.self 詳解
在應用有frameset或者iframe的頁面時,parent是父窗口,top是最頂級父窗口(有的窗口中套了好幾層frameset或者iframe),self是當前窗口, opener是用open方法打開當前窗口的那個窗口。
window.self
功能:是對當前窗口自身的引用。它和window屬性是等價的。
語法:window.self
注:window、self、window.self是等價的。
window.top
功能:返回頂層窗口,即瀏覽器窗口。
語法:window.top
注:如果窗口本身就是頂層窗口,top屬性返回的是對自身的引用。
window.parent
功能:返回父窗口。
語法:window.parent
注:如果窗口本身是頂層窗口,parent屬性返回的是對自身的引用。
在框架網頁中,一般父窗口就是頂層窗口,但如果框架中還有框架,父窗口和頂層窗口就不一定相同了。
判斷當前窗口是否在一個框架中:
<script type="text/javascript">
var b = window.top!=window.self;
document.write( "當前窗口是否在一個框架中:"+b );
</script>
你應當將框架視為窗口中的不同區域,框架是瀏覽器窗口中特定的部分。一個瀏覽器窗口可以根據你的需要分成任意多的框架,一個單個的框架也可以分成其它多個框架,即所謂的嵌套框架。
js中opener和parent的區別
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錯誤。
<html>
<body>
<form. name=form1>
<input type=text name=inpu >
<input type=button
>
</form>
</body>
</html>
--------------------------------
back2opener.html
--------------------------------
<html>
<body>
<form. name=form1>
<input type=text name=inpu >
<a class="under" href=# >添加</a>
</form>
</body>
</htmlwindow.opener 返回的是創建當前窗口的那個窗口的引用,比如點擊了a.htm上的一個鏈接而打開了b.htm,然后我們打算在b.htm上輸入一個值然后賦予a.htm上的一個id為“name”的textbox中,就可以
寫為:
window.opener.document.getElementByIdx_x_x("name").value = "輸入的數據";
============================================
常見的誤區:
父頁面
window.open( 'open.jsp?City= '+strCity, ' ', 'width=252, height=100, scrollbars=no ');
子頁面open.jsp
window.parent.maplet.clean();
報錯為window.parent.maplet為空或不是對象!
什么原因呢?別的沒有問題!
錯誤原因:
window.parent 表示當前框架的父框架,
如果子窗口不在框架中,那么就為空,
不是表示子窗口和父窗口的關系,
是框架之間的關系。
如果子窗口不在框架中,即通過A.html的一個鏈接打開的 B.html頁面,在B.html引用A.html的表單元素時,可以這樣寫:
window.opener.document.formname.maplet
其中formname是你父窗口中form的名字