window.parent與window.opener的區(qū)別 javascript調(diào)用主窗口方法
1: window.parent 是iframe頁面調(diào)用父頁面對象
舉例:
a.html
Html代碼
- <html>
- <head><title>父頁面</title></head>
- <body>
- <form name="form1" id="form1">
- <input type="text" name="username" id="username"/>
- </form>
- <iframe src="b.html" width=100%></iframe>
- </body>
- </html>
<html>
<head><title>父頁面</title></head>
<body>
<form name="form1" id="form1">
<input type="text" name="username" id="username"/>
</form>
<iframe src="b.html" width=100%></iframe>
</body>
</html>
如果我們需要在b.htm中要對a.htm中的username文本框賦值,就如很多上傳功能,上傳功能頁在Ifrmae中,上傳成功后把上傳后的路徑放入父頁面的文本框中
我們應該在b.html中寫
Html代碼
- <script type="text/javascript">
- var _parentWin = window.parent ;
- _parentWin.form1.username.value = "xxxx" ;
- </script>
<script type="text/javascript">
var _parentWin = window.parent ;
_parentWin.form1.username.value = "xxxx" ;
</script>
實例地址:
http://www.cnspry.cn/blog/attachments/window.parent 實例/a.html
源碼:
1.a.html
Html代碼
- <html>
- <head>
- <title>主頁面</title>
- <script>
- /** 為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量 */
- var parentVairous = "為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量";
- function parentInvokeIFrame()
- {
- var iframeTest = document.frames["iframeTest"]; //使用document.getElementById("iframeTest");同樣可以
- alert(iframeTest.document.body.innerHTML);
- alert(iframeTest.iFrameVair);
- }
- </script>
- </head>
- <body>
- <form name="form1" id="form1">
- <input type="text" name="username" id="username"/>
- <input type = "button" value = "父窗口調(diào)用IFrame子窗口中的內(nèi)容" onclick = 'parentInvokeIFrame()'/>
- </form>
- <iframe src="b.html" width = '100%' id = 'iframeTest'></iframe>
- </body>
- </html>
<html>
<head>
<title>主頁面</title>
<script>
/** 為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量 */
var parentVairous = "為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量";
function parentInvokeIFrame()
{
var iframeTest = document.frames["iframeTest"]; //使用document.getElementById("iframeTest");同樣可以
alert(iframeTest.document.body.innerHTML);
alert(iframeTest.iFrameVair);
}
</script>
</head>
<body>
<form name="form1" id="form1">
<input type="text" name="username" id="username"/>
<input type = "button" value = "父窗口調(diào)用IFrame子窗口中的內(nèi)容" onclick = 'parentInvokeIFrame()'/>
</form>
<iframe src="b.html" width = '100%' id = 'iframeTest'></iframe>
</body>
</html>
1.b.html
Html代碼
- <html>
- <head>
- <title></title>
- <script type="text/javascript">
- /** 為測試父窗體調(diào)用IFrame子窗體的全局函數(shù)而添加的子窗口全局函數(shù) */
- var iFrameVair = "測試父窗體調(diào)用IFrame子窗體的全局函數(shù)";
-
- function UpdateParent()
- {
- var _parentWin = window.parent ;
- _parentWin.form1.username.value = "xxxx" ;
- }
-
- function childInvokeParent()
- {
- var parentVairous = window.parent.window.parentVairous;
- alert(parentVairous);
- }
- </script>
- </head>
- <body>
- <form name="form1" id="form1">
- <p> </p>
- <p align="center">
- <input type = "button"
- name = "button"
- id = "button"
- value = "更新主頁面的UserName內(nèi)容"
- onclick = "UpdateParent()">
- <input type = "button"
- name = "button2"
- id = "button2"
- value = "測試IFrame子窗口調(diào)用父窗口的全局變量"
- onclick = "childInvokeParent();"/>
- </p>
- <p> </p>
- </form>
- </body>
- </html>
<html>
<head>
<title></title>
<script type="text/javascript">
/** 為測試父窗體調(diào)用IFrame子窗體的全局函數(shù)而添加的子窗口全局函數(shù) */
var iFrameVair = "測試父窗體調(diào)用IFrame子窗體的全局函數(shù)";
function UpdateParent()
{
var _parentWin = window.parent ;
_parentWin.form1.username.value = "xxxx" ;
}
function childInvokeParent()
{
var parentVairous = window.parent.window.parentVairous;
alert(parentVairous);
}
</script>
</head>
<body>
<form name="form1" id="form1">
<p> </p>
<p align="center">
<input type = "button"
name = "button"
id = "button"
value = "更新主頁面的UserName內(nèi)容"
onclick = "UpdateParent()">
<input type = "button"
name = "button2"
id = "button2"
value = "測試IFrame子窗口調(diào)用父窗口的全局變量"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</form>
</body>
</html>
ps:不能跨域獲取,例如iframe的src是'http://www.xxx.ccc/'就不可以
2: window.opener 是window.open 打開的子頁面調(diào)用父頁面對象
實例地址:
http://www.cnspry.cn/blog/attachments/window.opener 實例/a.html
源碼:
2.a.html
Html代碼
- <html>
- <head>
- <title>主頁面</title>
- <script type="text/javascript">
- /** 為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量 */
- var parentVairous = "為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量";
-
- /**
- * 因為不同于IFrame(IFrame有id,window.open()與IFrame的父子窗口的模式不同),
- * 所以當是通過window.open()方法打開一個新窗口使, 必須有一個新窗口的對象
- * 當然必須先讓子窗口彈出來, 才能調(diào)用子窗口中的變量, 否則拋出異常
- */
- var OpenWindow;
-
- function openSubWin()
- {
- OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, toolbar=no, menubar=yes, scrollbars=yes,resizable=yes,location=no, status=no');
- }
- function parentInvokeChild()
- {
- if(OpenWindow)//當然必須先讓子窗口彈出來, 才能調(diào)用子窗口中的變量, 否則拋出異常
- {
- alert(OpenWindow.iFrameVair);
- }
- }
- </script>
- </head>
- <body>
- <form name="form1" id="form1">
- <input type="text" name="username" id="username"/>
- <input type="button" value="彈出子頁面" onclick = "openSubWin()">
- <input type="button" value="測試調(diào)用彈出窗口中的全局變量" onclick = "parentInvokeChild()">
- </form>
- </body>
- </html>
<html>
<head>
<title>主頁面</title>
<script type="text/javascript">
/** 為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量 */
var parentVairous = "為測試IFrame子窗口調(diào)用父窗口的全局變量而添加的測試變量";
/**
* 因為不同于IFrame(IFrame有id,window.open()與IFrame的父子窗口的模式不同),
* 所以當是通過window.open()方法打開一個新窗口使, 必須有一個新窗口的對象
* 當然必須先讓子窗口彈出來, 才能調(diào)用子窗口中的變量, 否則拋出異常
*/
var OpenWindow;
function openSubWin()
{
OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, toolbar=no, menubar=yes, scrollbars=yes,resizable=yes,location=no, status=no');
}
function parentInvokeChild()
{
if(OpenWindow)//當然必須先讓子窗口彈出來, 才能調(diào)用子窗口中的變量, 否則拋出異常
{
alert(OpenWindow.iFrameVair);
}
}
</script>
</head>
<body>
<form name="form1" id="form1">
<input type="text" name="username" id="username"/>
<input type="button" value="彈出子頁面" onclick = "openSubWin()">
<input type="button" value="測試調(diào)用彈出窗口中的全局變量" onclick = "parentInvokeChild()">
</form>
</body>
</html>
2.b.html
Html代碼
- <html>
- <head>
- <title>子頁面</title>
- <script type="text/javascript">
- /** 為測試父窗體調(diào)用IFrame子窗體的全局函數(shù)而添加的子窗口全局函數(shù) */
- var iFrameVair = "測試父窗體調(diào)用IFrame子窗體的全局函數(shù)";
- function UpdateParent()
- {
- var _parentWin = window.opener;
- _parentWin.form1.username.value = "xxxx" ;
- }
- function childInvokeParent()
- {
- var parentVairous = window.opener.window.parentVairous;
- alert(parentVairous);
- }
- </script>
- </head>
- <body>
- <form name="form1" id="form1">
- <p> </p>
- <p align="center">
- <input type="button"
- onclick = "UpdateParent();"
- name="button"
- id="button"
- value="更新主頁面的UserName內(nèi)容">
- <input type = "button"
- name = "button2"
- id = "button2"
- value = "測試IFrame子窗口調(diào)用父窗口的全局變量"
- onclick = "childInvokeParent();"/>
- </p>
- <p> </p>
- </form>
- </body>
<html>
<head>
<title>子頁面</title>
<script type="text/javascript">
/** 為測試父窗體調(diào)用IFrame子窗體的全局函數(shù)而添加的子窗口全局函數(shù) */
var iFrameVair = "測試父窗體調(diào)用IFrame子窗體的全局函數(shù)";
function UpdateParent()
{
var _parentWin = window.opener;
_parentWin.form1.username.value = "xxxx" ;
}
function childInvokeParent()
{
var parentVairous = window.opener.window.parentVairous;
alert(parentVairous);
}
</script>
</head>
<body>
<form name="form1" id="form1">
<p> </p>
<p align="center">
<input type="button"
onclick = "UpdateParent();"
name="button"
id="button"
value="更新主頁面的UserName內(nèi)容">
<input type = "button"
name = "button2"
id = "button2"
value = "測試IFrame子窗口調(diào)用父窗口的全局變量"
onclick = "childInvokeParent();"/>
</p>
<p> </p>
</form>
</body>
經(jīng)過hanjs的提醒,確實需要注意的是,模態(tài)窗口的子窗口是沒有辦法修改父窗口頁面中的任何內(nèi)容的。
例如修改:OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, toolbar=no, menubar=yes, scrollbars=yes,resizable=yes,location=no, status=no');
為:OpenWindow = window.showModalDialog("b.html",'newwindow',"dialogHeight:100px,center:yes,resizable:no,status:no");
在子窗口中當希望修改父窗口中的內(nèi)容時,會彈出“某某”為空或不是對象的錯誤,而這里的“某某”就是你想修改的父窗口中的內(nèi)容作者:LiFuyun
出處:http://lifuyun.cnblogs.com
本文版權歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。