首页 > 代码库 > JS 子窗口向父窗口传值

JS 子窗口向父窗口传值

首先我们来了解下window对象的的方法open:

1,open() 方法用于打开一个新的浏览

window.open(URL,name,features,replace)

重要事项:请不要混淆方法 Window.open() 与方法 Document.open(),这两者的功能完全不同。为了使您的代码清楚明白,请使用 Window.open(),而不要使用 open()。

2,opener

opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用。---这句话怎么理解呢,例如

opener即谁打开我的,比如A页面利用window.open弹出了B页面窗口,那么A页面所在窗口就是B页面的opener,在B页面通过opener对象可以访问A页面。

注意:要求父窗口打开子窗口时须使用window.open方法才能使用window.opener回传值。

   window.opener.document.getElementById("Downloads").value = http://www.mamicode.com/‘新值‘;

附上一个子窗口向父窗口传值的例子

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>js实现子窗口传值到父窗口--父页面</title>
 6 </head>
 7 <body>
 8 <!--open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口。-->
 9 <input type="button" value="打开子窗口" onclick="open_win(‘children.html‘,‘children‘,‘800‘,‘600‘)"/>
10 
11 <input value="333" id="Downloads" />
12 
13 <script>
14     function open_win(url, title, w, h) {
15         var iWidth = w;
16         var iHeight = h;
17         var iTop = (window.screen.availHeight-30-iHeight)/2;       //获得窗口的垂直位置;
18         var iLeft = (window.screen.availWidth-10-iWidth)/2;           //获得窗口的水平位置;
19         myWindow  = window.open( url, title, height= + iHeight + ,,innerHeight= + iHeight + ,width= + iWidth + ,innerWidth= + iWidth + ,top= + iTop + ,left= + iLeft + , toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no, titlebar=yes, alwaysRaised=yes);
20     }
21 
22 </script>
23 </body>
24 </html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js实现子窗口传值到父窗口--子页面</title>
</head>
<body>
我是子窗口
<script>
    window.onload = function(){
        window.opener.document.getElementById("Downloads").value = 新值;
    }
</script>
</body>
</html>

注意:这两个文件不能再本地直接打开,会报错:必须要在架设在服务器上

children.html:11 Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.

opener 属性非常有用,创建的窗口可以引用创建它的窗口所定义的属性和函数。

window.opener

注释:只有表示顶层窗口的 Window 对象的 operner 属性才有效,表示框架的 Window 对象的 operner 属性无效。

3,再来谈谈opener与parent的区别 并附上top

window.parent 是iframe页面调用父页面对象,当我们想从iframe内嵌的页面中访问外层页面是可以直接利用window.parent获取,window.opener 是window.open或超链接<a> 打开的子页面调用父页面对象

parent表示父窗口,parent用于在iframe,frame中生成的子页面中访问父页面的对象。比如一个A页面利用iframe或frame调用B页面,那么A页面所在窗口就是B页面的parent

top 属性返回最顶层的先辈窗口。

该属性返回对一个顶级窗口的只读引用。如果窗口本身就是一个顶级窗口,top 属性存放对窗口自身的引用。如果窗口是一个框架,那么 top 属性引用包含框架的顶层窗口。

window.top

可应用于弹框跳出框架

function breakout()
  {
  if (window.top!=window.self) 
    {
    window.top.location="/example/hdom/tryjs_breakout.htm"
    }
  }
</script>
</head>
<body>

<input type="button" onclick="breakout()" value="http://www.mamicode.com/跳出框架!">

  附:Window对象、Parent对象、Frame对象、Document对象和Form对象的阶层关系 
    Window对象→Parent对象→Frame对象→Document对象→Form对象,
    如下: parent.frame1.document.forms[0].elements[0].value;

4,模态窗口与父窗口通信

通过使用showModelDialog(),及showModelessDialog()方法创建的子窗口想与父窗口通信时,不能通过window.opener

来获取父窗口对象。要实现通信,必须在创建模态子窗口时向子窗口传入父窗口对象。

 

JS 子窗口向父窗口传值