天天看點

window.parent ,window.top,window.self 詳解及parent和opener的差別

在應用有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的名字

繼續閱讀