zoukankan      html  css  js  c++  java
  • 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

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

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

    vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) 

    vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures]) 

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    URL--必选参数,类型:字符串。用来指定对话框要显示的文档的URL。 
    vArguments--可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。 
    sFeatures-- 可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。 
    1.dialogHeight :对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5以上是px,为方便其见,在定义modal方式的对话框时,用px做单位。 
    2.dialogWidth: 对话框宽度。 
    3.dialogLeft: 离屏幕左的距离。 
    4.dialogTop: 离屏幕上的距离。 
    5.center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。 
    6.help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。 
    7.resizable: {yes | no | 1 | 0 } 〔IE5+〕:是否可被改变大小。默认no。 
    8.status: {yes | no | 1 | 0 } 〔IE5+〕:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。 
    9.scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。 

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    例子:子页面向父页面传值

    父页面

    <body>
    <!--open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口。-->
    <input type="button" value="打开子窗口" onclick="open_win()"/>
    
    <input value="333" id="Downloads" />
    
    <script>
        function open_win(){
            var str =window.showModalDialog("children.html","","dialogWidth=400px;dialogHeight=500px");
            alert(str);
        }
    </script>

    子页面:

    <body>
    我是子窗口
        <script type="text/javascript">
        window.returnValue="http://www.jb51.net";
    </script>
    </body>

     附上一篇:iframe层获取父页面元素,父页面获取iframe层元素的博客:

    http://www.cnblogs.com/LYshuqian/p/3312383.html

  • 相关阅读:
    从对比学习(Contrastive Learning)到对比聚类(Contrastive Clustering)
    国际学术会议英文口头报告(Oral presentation)常用语句
    物以类聚人以群分:聚类分析的一些挑战和进展
    多视图子空间聚类/表示学习(Multi-view Subspace Clustering/Representation Learning)
    关于“Unsupervised Deep Embedding for Clustering Analysis”的优化问题
    【Swift】TableView显示多列数据,锁定第一列位置
    【Swift】 WKWebView https 加载不受信任的站点
    【Swift】Starscream 实现socket连接
    【Swift】GRDB数据库本地存储聊天记录
    【Swift/Objective-c】公司项目优化(二)
  • 原文地址:https://www.cnblogs.com/qianxunpu/p/7086411.html
Copyright © 2011-2022 走看看