子窗口和父窗口的函数或对象能否相互访问
解决思路:
       每一个窗口其实也是一个对象,窗口内的对象或函数就相当于对象内的对象或方法,问题的关键是如何取得窗口对象的控制句柄,不同的窗口的控件句柄是不一样的,下面分三种窗口讨论。
具体步骤:
1.用window.open()打开的一般窗口。

<script>
var sub
function sub_win(){
sub=window.open()    //sub为子窗口句柄
//以数据流方式向子窗口输出HTML代码 ,sub_function()为子窗口的演示函数
sub.document.write("<script>function sub_function(){alert(’子窗口函数’)}<\/script><button onClick=’opener.par_function()’>调用父窗口函数</button>")        
sub.document.close() //关闭子窗口的输出流
}
function par_function(){//父窗口的演示函数
alert("父窗口函数")
}
</script>
<button onClick="sub_win()">打开子窗口</button><button onClick="sub.sub_function()">调用子窗口内函数</button>

代码运行效果如图1.5.6所示。

图1.5.6 在父窗口访问子窗口的函数

从上面的代码中可以发现,父窗口调用子窗口的函数或对象,需要在对象前加上子窗口句柄(上例中的变量sub)作前缀,要访问子窗口中的sub_function()函数,就是sub.sub_function(),反过来,在子窗口中访问父窗口的函数或对象,需要在前面加上opener,如opener.par_function()。
 提示:这里只是为了演示方便,以数据流方式向子窗口中输出HTML代码,在实际应用时直接在弹出页中按上面所说的方法调用就行了。

2.用showModalDialog打开的模式窗口。

<script>
function smdWin(){
win=window.showModelessDialog("demo.htm",window,"dialogWidth=200px;dialogHeight=200px;status=0;scroll=no")
}
</script>
<button οnclick="smdWin()">打开模式窗口</button>
<input id="oInput">

demo.htm:

<input id="sInput">
<button onClick="dialogArguments.oInput.value=sInput.value">传递文字</button>

代码运行效果如图1.5.7所示。

图1.5.7 在子窗口访问父窗口的对象

注意:在模式对话框的父窗口中无法通过鼠标操作控制访问模式对话框的对象,但可以通过设置自动执行的脚本来实现访问,方法同无模式对话框。

3.用showModelessDialog方法打开的无模式窗口

<script>
var win
function smdWin(){
win=window.showModelessDialog("demo.htm",window,"dialogWidth=200px;dialogHeight=200px;status=0;scroll=no")
}
</script>
<button οnclick="smdWin()">打开无模式窗口</button>
<input id="oInput">
<button onClick="win.sInput.value=oInput.value">传递文字</button>

demo.htm:

<input id="sInput">
<button onClick="dialogArguments.oInput.value=sInput.value">传递文字</button>

代码运行效果:

图1.5.8 在父窗口中访问子窗口的对象

图1.5.9 在子窗口中访问父窗口的对象

可以看出,父窗口和子窗口的数据传递基本方法是一样,只是模式窗口和无模式窗口在向父窗口传递数据时把一般窗口的opener换成了dialogArguments
注意:打开模式窗口或无模式窗口的第二个参数须为window,模式窗口的父窗口无法以常规方式即时向它传递数据,因为它的父窗口无法获得焦点。
技巧:父窗口要给子窗口传递数据,还可以通过给页地址后添加参数,然后在子窗口用location.search取值的方式来完成,还可以通过打开子窗口的第二个参数来完成,如:

<script>
var sub
function sub_win(){
sub=window.open("","demo","width=100,height=100")
sub.document.write("<script>alert(window.name)<\/script>")  
sub.document.close()
}
</script>
<button onClick="sub_win()">打开子窗口</button>

图1.5.10 通过open方法的第二个参数传递数据
特别提示
对于第一种情况,代码运行后,先单击【打开子窗口】按钮,然后再单击【调用子窗口内函数】和【调用父窗口函数】按钮看效果;第二、三种情况的代码运行后在模式/无模式窗口的文本框中填写内容后再单击【传递文字】按钮。

特别说明

通过本例的学习,读者朋友应该掌握父窗口与子窗口的相互访问方法,还有对象的概念。

轉自:http://www2.flash8.net/teach/4139.htm

转载于:https://www.cnblogs.com/Athrun/archive/2009/07/07/1518159.html

[轉]子窗口和父窗口的函数或对象能否相互访问相关推荐

  1. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  2. javascript:子窗口和父窗口交互

    最近项目开发中需要子窗口和父窗口交互的内容,基本上无非就是把子窗口的信息传递给父窗口,并且关闭自己等等,或者是父窗口把自己的信息传递给子窗口等等. 1.父窗口传递信息给子窗口 看代码实例: <s ...

  3. MFC子窗口和父窗口(SetParent,SetOwner)

    一.概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口.这个数据结构中有四个数据用来构建list, ...

  4. 关闭子窗口刷新父窗口

    以下这段代码是为了弹出一个窗口,window.showModalDialog这个是弹出窗体的地方,当执行到的时候它后面的代码就不执行了,当把弹出的窗体关闭将会执行后面的location.reload( ...

  5. Electron中打开和关闭子窗口以及子窗口向父窗口传值

    场景 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/a ...

  6. window.open返回值实例详解(子窗口向父窗口回显)

    window.open返回值实例详解(子窗口向父窗口回显) window.open实例: 1.父页面: <script language="javascript" type= ...

  7. MFC获得主窗口和父窗口指针

    VC++中有关句柄和指针及其转换 1.MFC窗口的句柄和指针的转换       (1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄.       (2)使 ...

  8. QT开发_弹出窗口禁用父窗口并移动到父窗口中心位置

    在开发中我们可能会增加一些动画效果,如弹出子窗口时父窗口不可操作 我们可以在弹出子窗口的构造函数里添加如下代码: setWindowModality(Qt::ApplicationModal); 这条 ...

  9. iframe子页面调用父页面javascript函数的方法

    1.iframe子页面调用 父页面js函数 子页面调用父页面函数只需要写上window.parent就可以了.比如调用a()函数,就写成: window.parent.a(); 2.iframe父页面 ...

最新文章

  1. 如何使用 System.IO 和 Visual C# 读取文本文件
  2. 大名鼎鼎的Requests库用了什么编码风格?
  3. 函数 —— strtok() 例如:按照字符拆分字符串,放入新定义的数组中;按照字符拆分字符串,放入原先的数组中
  4. 嵌入式编程C语言提高代码效率的14种方法
  5. Java8Stream
  6. 260. 只出现一次的数字 III 【位运算】
  7. 猜数字游戏python程序gui_python GUI 猜数字游戏
  8. 领地柜怎么砸_在客厅和书房的隔墙上砸洞装个折叠窗,家里亮堂堂!这洞砸得值了...
  9. 安装archlinux_archlinux/manjaro 上安装percona-server
  10. NFS 服务器配置说明
  11. windows linux 融合,Windows和Linux的设备驱动框架的对比融合研究
  12. iOS 高级去水印,涂鸦去水印
  13. matlab输出lccde_Matlab与Visual C++混合编程处理全站仪数据的方法
  14. Hive自定义函数UDF、UDAF、UDTF
  15. scala map与mapPartitions区别
  16. Windows XP Nlite 2007珍藏版 BY 丘比特
  17. msm 8953 camera 流程
  18. 理解区块链的“非对称加密”
  19. 爱立信发布人体通信技术:最高传输10Mbps
  20. 怎么可以修改pr基本图形中的文字_不会给视频添加字幕?这里可以解决(附工具下载)...

热门文章

  1. 用GrabCut进行前景检测(对书中代码进行改进)Python
  2. Python创建删除文件(或文件夹)
  3. 用latex排版电磁场课程报告
  4. [洛谷P4726]【模板】多项式指数函数
  5. 酷欧天气(CoolWeather)应用源码
  6. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to
  7. UA MATH567 高维统计II 随机向量10 Grothendieck不等式的证明 版本二:kernel trick
  8. Windows系统下首次安装深度学习框架Caffe失败
  9. asp.net访问sqlserver获取数据、IsPostBack属性和VS可视化调试的概念
  10. 图解在反汇编中识别VC++之if-else分支语句