`

各种子父窗口间的通讯

 
阅读更多

$("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementByIdx_x("父窗口元素ID");

 

取父窗口的元素方法:$(selector, window.parent.document);
那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);

类似的,取其它窗口的方法大同小异
$(selector, window.top.document);
$(selector, window.opener.document);
$(selector, window.top.frames[0].document);

 

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

子窗口创建及父窗口与子窗口之间通信:

 

1、Javascript弹出子窗口

可以通过多种方式实现,下面介绍几种方法

(1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象

其用法为:
window.open(URL,windowName,parameters);

URL: 描述要打开的窗口的URL地址,如何为空则不打开任何网页;

windowName:描述被打开的窗口的民称,可以使用'_top'、'_blank'等内建名称,这里的名称跟<a href="..." target="...">里的target属性是一样的。

parameters:描述被打开的窗口的参数值,或者说是样貌,其包括窗口的各个属性值,及要传入的参数值。

例如:

打开一个 400 x 100 的干净的窗口:
open('','_blank','width=400,height=100,menubar=no,toolbar=no,
location=no,directories=no,status=no,scrollbars=yes,resizable=yes')

也可以这样写: var newWindow = open('','_blank');

参数说明如下:

top=# 窗口顶部离开屏幕顶部的像素数
left=# 窗口左端离开屏幕左端的像素数
width=# 窗口的宽度
height=# 窗口的高度
menubar=... 窗口有没有菜单,取值yes或no
toolbar=... 窗口有没有工具条,取值yes或no
location=... 窗口有没有地址栏,取值yes或no
directories=... 窗口有没有连接区,取值yes或no
scrollbars=... 窗口有没有滚动条,取值yes或no
status=... 窗口有没有状态栏,取值yes或no
resizable=... 窗口给不给调整大小,取值yes或no


(2) 在javascript中除了通过open()方法建立window对象实现弹出窗口外,还可以通过建立对话框的方式弹出窗口。
如:
alert(""); //弹出信息提示对话框
confirm(""); //弹出信息确认对话框
prompt(""); //具有交互性质的对话框

但是,上述实现的弹出窗口具有的功能较为单一,只能完成较为简单的功能。对于需要在对话框中显示多个数据信息,

甚至是HTML控件就无能为力了。

(3) 使用模态对话框实现复杂的对话框需求
在javascript的内建方法中还有一类方法可以实现通过对话框显示HTML内容,
也就是说可以通过创建对话框的方式来完成创建窗口对象所能完成的功能。
包括创建模态对话框和非模态对话框两种。

实现方法为:

//创建模态你对话框
window.showModalDialog(sURL,vArguments,sFeatures)


//创建非模态对话框
window.showModelessDialog(sURL,vArguments,sFeatures)

其区别在于:

用showModelessDialog()打开窗口时,不必用window.close()去关闭它,当以非模态方式[IE5]打开时, 打开对话框

的窗口仍可以进行其他的操作,即对话框不总是最上面的焦点,当打开它的窗口URL改变时,它自动关闭。而模态[IE4]方式的对话框始终有焦点(焦点不可移走,直到它关闭)。模态对话框和打开它的窗口相联系,因此我们打开另外的窗口时,他们的链接关系依然保存,并且隐藏在活动窗口的下面。 showModeDialog()则不然。

参数说明:

sURL:必选参数,类型:字符串。

用来指定对话框要显示的文档的URL。

vArguments:可选参数,类型:变体。

用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。

sFeatures:选参数,类型:字符串。

用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。

dialogHeight:对话框高度

不小于100px,IE4中dialogHeight和dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。
  
dialogWidth: 对话框宽度。
 
dialogLeft: 距离桌面左的距离。
  
dialogTop: 离桌面上的距离。
 
center: 窗口是否居中

默认yes,但仍可以指定高度和宽度,取值范围{yes | no | 1 | 0 }。
  
help: 是否显示帮助按钮

默认yes,取值范围 {yes | no | 1 | 0 }。

 resizable: 是否可被改变大小。

默认no,取值范围 {yes | no | 1 | 0 } [IE5+]。

 status: 是否显示状态栏。

默认为yes[ Modeless]或no[Modal],

取值范围{yes | no | 1 | 0 } [IE5+]。

scroll:指明对话框是否显示滚动条。

默认为yes,取值范围{ yes | no | 1 | 0 | on | off }。

还有几个属性是用在HTA中的,在一般的网页中一般不使用。

dialogHide:在打印或者打印预览时对话框是否隐藏。

默认为no,取值范围{ yes | no | 1 | 0 | on | off }。

edge:指明对话框的边框样式。

默认为raised,取值范围{ sunken | raised }。

unadorned:默认为no,取值范围{ yes | no | 1 | 0 | on | off }。

传入参数:

要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象

例如:

var newWin=window.showModalDialog(url,window,'dialogHeight:500px, dialogLeft:100px, dialogTop:100px,

dialogWidth:300px, status:0, edge:sunken');

newWin.open();

与使用window.open()方法创建窗口相比,模态方法创建窗口的区别在于有模态方法创建的窗口后将不能操作父窗口.


2、子窗口与父窗口间通信

(1) 使用window.open()创建的窗口与父窗口通信
可以在子窗口页面中通过window.opener来获取父窗口对象,获取之后子窗口便可以对父窗口执行刷新,传值等操作。
如:
window.opener.location.reload(); //子窗口刷新父窗口
window.opener.location.href //获取父窗口href
window.opener.locaiton.pathname //获取父窗口路径名

//刷新父页面
window.location.href=window.location.href ; //重新定位父页面
window.location.reload;


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

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

实现方式为:

在父窗口中:

var newWin=window.showModelDialog(url,window,'');
newWin.open();

此时参数window即是父窗口对象

在子窗口中:

需首先获取父窗口对象,然后才能使用父窗口对象。由于父窗口对象是在创建
子窗口时通过传入参数的方式传入的,因此,在子窗口中也只能通过获取窗口参数的方式获取父窗口对象。获取方式如下



var parent=widnow.dialogArguments;
变量parent便是父窗口对象。

例如:

//通过子窗口提交父窗口中的表单:form1,提交后执行查询操作
var parent=window.dialogArguments;
parent.document.form1.action="QueryInfor.jsp";
parent.submit();

//刷新父页面
var parent=window.dialogArguments;
parent.location.reload();

//从子窗口传值到父窗口
要实现在模态子窗口中传值到父窗口,需要使用window.returnValue完成

实现方法如下:

在子窗口中:

//获取父窗口某字段值,对该值加一后返回父窗口
var parent=window.dialogArguments;
var x=parent.docuement.getElementById("age").value;
x=x+1;

//传回x值
window.returnValue=x;

在父窗口中:

//获取来自子窗口的值
var newWin=window.showModelDialog(url,window,'');
if(newWin!=null)
document.getElementByIdx_x("age").value=newWin;

//在子窗口中设置父窗口的值
在子窗口中向父窗口中传入值似乎没有直接设置父窗口中的值来得明了。直接设置父窗口中元素的值显得要更灵活一些,不过具体使用哪种方法要根据实际情况和已有的实现方式而定,因为如果使用了不切实际的方法不仅降低开发效率,也降低了执行效率,往往也会造成不优雅的实现方式和代码风格。

子窗口设置父窗口的值使用方法如下:

子窗口中:

var parent=window.dialogArguments;
var x=parent.document.getElementByIdx_x("age").value;
x=x+1;
//设置父窗口中age属性值
parent.document.getElementByIdx_x("age").value=x;

以上是我在项目中使用javascript解决子窗口问题时,收集及积累的一些方法和资料。我是使用建立模态窗口的方式来实现的(这主要与项目本身有关),不过其实不论是使用window.open()还是使用window.showModelDialog()进行传参等操作时虽然在实现方法上有很大的差别,初次接触会觉得有点乱,但只要理清子窗口与父窗口之间的关系和角色之后,就很好理解了。

 

 

转自:http://blog.sina.com.cn/s/blog_4f925fc30100rwmd.html

分享到:
评论

相关推荐

    javascript经典特效---子父窗口的刷新.rar

    这种子父窗口的刷新效果常用于购物车系统、在线表单、多窗口协作编辑器等场景。例如,在一个购物网站上,用户可以在子窗口添加商品到购物车,然后通过刷新父窗口来即时显示购物车的更新情况。 通过以上知识点,...

    迅雷资源种子搜索

    5. **使用迅雷下载**: 打开迅雷客户端,点击菜单栏上的“新建”或拖拽种子文件到迅雷窗口,迅雷会自动识别并开始下载。在下载过程中,迅雷会根据网络状况智能分配带宽,确保下载速度和稳定性。 6. **安全与法律问题...

    如何制作bt种子

    这将打开一个新窗口,让你选择制作种子的选项。 5. **选择发布内容**: - A:在“源文件”部分,你可以选择制作整个目录或单个文件。如果你想分享整个文件夹,确保选中“选择整个目录”。 - B:设置“分块大小...

    种子磁力查找(种子云) v1.5

    种子磁力查找(种子云) v1.5是一款专门针对P2P文件分享技术的网络软件,主要功能是帮助用户高效地搜索并获取BT种子文件。在这个版本中,v1.5可能带来了优化和增强的功能,以提升用户体验和搜索效率。 在P2P网络中,...

    BT游戏种子.rar

    标题中的“BT游戏种子.rar”指的是使用BitTorrent(简称BT)协议进行分享的游戏资源集合,这些资源被压缩成RAR格式的文件。RAR是一种常见的压缩格式,可以将多个文件打包成一个单一的档案,便于存储和传输。BT游戏...

    种子填充实现图像分割

    例如,可以通过比较像素间的颜色差异来判断是否扩展到下一个像素。 4. **OpenCV库**:压缩包中的"OpenCV种子填充实现彩色图像分割的代码.cpp"表明使用了OpenCV(Open Source Computer Vision Library)来实现这个...

    全套.net教程,不玩虚的,直接上种子

    【标题】中的“全套.net教程,不玩虚的,直接上种子”意味着这是一套全面的.NET编程教学资源,提供者强调其内容充实,没有多余或不实用的部分,并且通过BT种子的形式提供,确保了用户可以稳定地获取到这些教程。...

    ABP VNext种子数据按顺序生成

    在这个场景中,"ABP VNext种子数据按顺序生成"是指在项目初始化时,根据特定顺序创建和填充数据库的初始数据,这些数据通常用于设置系统的默认配置、角色、用户和其他必须的数据。 在ABP VNext中,种子数据的生成...

    真假种子和劣质种子的鉴别方法.doc

    种子是农业生产的基础,选择优质的种子对于农作物的生长和产量至关重要。在购买种子时,农民们常常面临真假种子和劣质种子的问题,导致农作物减产甚至绝收。因此,掌握一些基本的种子鉴别方法是非常必要的。以下是...

    360浏览器 BT种子制作工具

    标题 "360浏览器 BT种子制作工具" 指的是一种特定的应用程序,它允许用户利用360浏览器创建自己的BT种子文件。BT种子(BitTorrent Tracker)是BitTorrent网络中用于共享文件的一种机制,它包含有关文件位置和下载者...

    BT种子转磁力链工具

    BT种子转磁力链工具磁力链接转种子接口,种子转磁力链接接口,种子文件编辑接口BT转磁力链接工具是一款小巧快速的BT转换工具BT种子转磁力链工具磁力链接转种子接口,种子转磁力链接接口,种子文件编辑接口BT转磁力...

    Windows7正版下载各版本种子

    下载-Windows7正版下载 个版本种子下载,这是一个地址连接种子文件,下载后可用迅雷下载。

    python实现种子填充算法.zip

    种子填充算法,也被称为区域生长算法,是计算机图形学中的一个基本操作,广泛应用于图像处理和分析领域。它通过从用户指定的一个或多个“种子”像素出发,根据一定的连通性准则来填充整个同色区域。这个过程可以用于...

    种子点生长matlab

    在种子点生长过程中,模糊连接度可以提供更灵活的像素间相似性判断,从而提高分割效果。 总结来说,种子点生长算法是图像处理中的一个重要工具,特别是在目标区域特征明显且边界清晰的场景下,如海岸线提取。MATLAB...

    C#实现种子扫描线填充算法

    种子扫描线填充算法是一种在计算机图形学中广泛用于填充二维图形内部区域的算法。它主要应用于图像处理、游戏开发和2D图形用户界面设计等领域。本文将深入探讨如何使用C#语言来实现这一算法。 首先,理解种子填充...

    种子填充算法-深度优先搜索

    在种子填充中,每个像素点可以视为图中的一个节点,相邻的像素则表示节点间的边。当应用DFS时,我们从种子像素出发,沿着4-连接(上下左右)或8-连接(加上对角线)的方式检查相邻像素,如果相邻像素颜色与种子相同...

    区域生长算法,种子点选取

    ### 区域生长算法及其种子点选取方法 #### 一、引言 在图像处理领域,区域生长(Region Growing)是一种常用的分割技术。通过选择一个或多个初始像素(即种子点),并根据一定的相似性准则逐步扩展这些种子点周围...

    PSP种子神器

    "PSP种子神器"是一款专为PlayStation Portable(PSP)设备设计的资源搜索工具,主要功能是帮助用户寻找并下载适用于PSP的游戏、软件、音乐、视频等资源的种子文件。这款神器集成了P2P(peer-to-peer)技术,使得用户...

    利民种子销售系统,一款适合乡镇种子经销处应用的好软件

    本系统是为吉林省榆树市的一个乡镇种子经销部开发,现共享出来。适合其他乡镇应用。 一、说明 本系统为“种子销售管理系统”,包含种子销售、农资销售、用户设置三个模块,其中种子销售和农资销售两个模块有细分为...

    torrent 种子文件修改器

    种子文件(Torrent 文件)是BitTorrent 协议的一部分,用于分发大文件,如电影、音乐、软件等。这些文件包含有关数据块的信息,以及如何在P2P网络上找到并下载这些数据块的元数据。"torrent 种子文件修改器"是一个...

Global site tag (gtag.js) - Google Analytics