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 = ‘新值‘;

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

 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="跳出框架!">

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

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

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

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

时间: 2025-01-07 15:28:27

JS 子窗口向父窗口传值的相关文章

js子窗口操作父窗口的标签

======================================父窗体 <input id="aaaa" type="button"/> function upfile()         {                         resultValue = window.showModelessDialog("ceshi.aspx?file=DownFile", window, "dialogWidt

JS子窗口调用父窗口的方法

有两种情况: 一,框架(iframe)形式,这时用到是window.parent,详情如下: 1,1.html代表的是父窗口 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/

JS打开新窗口,子窗口操作父窗口

<!--父窗口弹窗代码开始--> <script type="text/javascript"> function OpenWindow() { window.open('WebForm1.aspx', '_blank', 'width=400,height=100,menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes'); } functi

angular 使用bootstratp模态框+响应式表单+响应式表单的验证+子窗关闭父窗口刷新

This is quite big project today 这次有以下几个功能: 1.ng-bootstrap模态框 2.响应式表单 3.响应式表单的验证 4.子窗关闭父窗口刷新 其实这几个哪一个都能写一个话题,事情太多了,时间紧任务重,一起写了吧: ng-bootstrap模态框所需要的条件(very very important),如果写错,查错非常的难哦,请慎重[反正我看不懂错误提示,出个错解决老办天]. 1.package.json加入dependencies: "@ng-boots

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)(或将数据传回A窗口) 以下是从实际项目中截取出来和window.open()方法相关的代码,业务逻辑如下: 1. 点击父窗口的div标签(id="addMatchSchedule"),出发点击事件,打开子窗口: 2. 点击子窗口的button按钮,触发点击时间,即调用addSchduleI

Qt 代码: 子窗口调用父窗口(其实就是用指针直接访问)

之前的 Qt 编程大多只涉及简单的多窗口,并未染指窗口间的传值交互,想来还是“涉世未深”,对 Qt 的理解.应用还需殷勤努力. 这次的问题是这样的,我想要实现一个类似QQ.阿里旺旺的聊天客户端,在弹出表情对话框后,能够选择表情并返回给聊天窗口的消息输入框,这就需要两个窗口之间的传值交互. 首先想到的解决方法自然是使用Qt自带的signal/slot机制.即首先发信号给父窗口,父窗口接到信号执行槽函数发送一个携带所需数据的信号给子窗口.但是疑问来了:要在子窗口中接收到父窗口的信号必须进行signa

页面嵌套iframe后,点击里面的链接,然后父窗口跳转(子窗口控制父窗口的链接跳转)

做app的时候遇到一个问题,一个页面,然后里面嵌套了一个另一个页面,想实现点击里面的链接,然后外面进行跳转,不然的话,里面的页面永远出不来, 后面想了个办法,app的页面都是打开打开,不关闭的,然后由上一个页面用postmessage进行监听,然后子窗口发送信息给父窗口,父窗口接到信息后进行 页面跳转,Android可以,然而ios却不行,坑了:只能想另外一种办法, app打开页面不是都不会关闭的嘛,然后让这个top页面去轮询读取cookie,目标页面 判断请求头部,是否为移动端访问(因为目标页

frameset子窗口获取父窗口失败原因?

报错信息: arrow.html:44 Uncaught SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match. 报错代码: 1 $(".main").click( function() { 2 var tartget = window

MFC子窗口向父窗口发送消息

MFC子窗口向父窗口发送消息(测试成功20110117) 分类: VC++学习2012-08-17 17:22 4327人阅读 评论(4) 收藏 举报 测试mfcuserc 在MFC中,使用用户自定义消息,子窗口向父窗口发送消息过程.代码: 1)在resourse.h中增加定义: //#define WM_add_event_ok (WM_USER + 100) //这种定义方法没有测试,不知道行不行:static UINT WM_add_event_ok = RegisterWindowMes