2022年子窗口创建及父窗口与子窗口之间通信 .pdf
1、Javascript弹出子窗口可以通过多种方式实现,下面介绍几种方法(1) 通过 window 对象的 open() 方法, open() 方法将会产生一个新的window 窗口对象其用法为:window.open(URL,windowName,parameters); URL: 描述要打开的窗口的URL 地址,如何为空则不打开任何网页;windowName: 描述被打开的窗口的民称,可以使用_top 、_blank 等内建名称,这里的名称跟 里的 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(); / 弹出信息确认对话框名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 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 :选参数,类型:字符串。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。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 或 noModal ,取值范围 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 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 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 来获取父窗口对象。要实现通信,必须在创建模态子窗口时向子窗口传入父窗口对象。实现方式为:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 在父窗口中: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.returnV alue 完成实现方法如下:在子窗口中:/获取父窗口某字段值,对该值加一后返回父窗口var parent=window.dialogArguments; var x=parent.docuement.getElementById(age).value; x=x+1 ;/传回 x 值window.returnV alue=x; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 在父窗口中:/获取来自子窗口的值var newWin=window.showModelDialog(url,window,); if(newWin!=null) document.getElementById(age).value=newWin; /在子窗口中设置父窗口的值在子窗口中向父窗口中传入值似乎没有直接设置父窗口中的值来得明了。直接设置父窗口中元素的值显得要更灵活一些 ,不过具体使用哪种方法要根据实际情况和已有的实现方式而定,因为如果使用了不切实际的方法不仅降低开发效率,也降低了执行效率,往往也会造成不优雅的实现方式和代码风格。子窗口设置父窗口的值使用方法如下:子窗口中:var parent=window.dialogArguments; var x=parent.document.getElementById(age).value; x=x+1 ;/设置父窗口中age 属性值parent.document.getElementById(age).value=x; 以上是我在项目中使用javascript解决子窗口问题时,收集及积累的一些方法和资料。我是使用建立模态窗 口 的方 式 来实 现 的( 这主 要 与项 目本 身 有关 ) ,不 过其 实 不论 是 使用window.open()还是 使 用window.showModelDialog()进行传参等操作时虽然在实现方法上有很大的差别,初次接触会觉得有点乱,但只要理清子窗口与父窗口之间的关系和角色之后,就很好理解了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -