在應用有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>
你應當将架構視為視窗中的不同區域,架構是浏覽器視窗中特定的部分。一個浏覽器視窗可以根據你的需要分成任意多的架構,一個單個的架構也可以分成其它多個架構,即所謂的嵌套架構。
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
<a class="under" href=# >添加</a>
</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的名字