首页 > 代码库 > 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 子窗口向父窗口传值