javascript showModalDialog,open取得父窗口的方法
通常使用window.open的方式开启新窗口的话 要取得父窗口的控件,可以用window.opener来取得父窗口 然而如果使用showModalDialog的话…却无效 如果有需要的话,需要修改开启的语法以及showModalDialog中的语法 开启语法第2个参数请下self,范例如下 var rc=window.showModalDialog(strURL,self,sFeatures); 然后接着就是呼叫父窗口的语法 var pWindow=window.dialogArguments; 这样就可以取得父窗口的window对象控制了。例如: window.dialogArgument 在JavaScript中,打开新窗口的方法主要有两种:`window.open()` 和 `window.showModalDialog()`. 这两者在处理与父窗口交互时有所不同。本篇文章主要探讨如何在使用`showModalDialog`时获取父窗口的方法。 让我们了解`window.open()`。当你使用`window.open(url, name, features)`打开新窗口时,新窗口可以通过`window.opener`属性来访问其父窗口。例如,如果A页面使用`window.open()`打开B页面,那么在B页面中,你可以通过`window.opener`来访问A页面的任何公共属性和方法,包括修改A页面的DOM元素。 然而,对于`window.showModalDialog()`情况就有所不同。`showModalDialog()`用于打开一个模态对话框,它会阻塞父窗口直到对话框关闭。当使用`showModalDialog(url, arg, features)`时,第二个参数`arg`允许你传递数据到新打开的对话框,而不是像`window.open()`那样通过`window.opener`访问父窗口。如果需要在模态对话框中获取父窗口的信息,你需要在调用`showModalDialog`时,将`self`作为第二个参数,如下所示: ```javascript var rc = window.showModalDialog(strURL, self, sFeatures); ``` 这样,你就可以通过`window.dialogArguments`来访问父窗口传递的数据,而不是父窗口的`window`对象。例如,如果你想获取父窗口中名为"processId"的输入字段的值,你可以这样做: ```javascript var pWindow = window.dialogArguments; var processIdValue = pWindow.document.getElementsByName("processId")[0].value; ``` 这里,`pWindow`不是父窗口的`window`对象,而是对话框被打开时传递的参数对象,所以不能直接用来访问父窗口的DOM元素。 需要注意的是,`window.opener`和`window.parent`这两个属性在JavaScript中的作用不同。`window.parent`是指当前窗口在框架集中的父窗口,如果当前窗口没有嵌套在其他窗口中,`window.parent`就是指向自身。而`window.opener`则只适用于`window.open()`的情况,表示打开当前窗口的源窗口。 如果尝试访问`window.opener`而该引用失效(例如,用户已经关闭了父窗口),则`window.opener`将返回`null`。在使用`window.opener`之前,应检查其是否为`null`,以避免因尝试访问不存在的对象而引发的JavaScript错误。 举个例子,如果你有一个页面`back2opener.html`,你想在新打开的对话框中输入数据并将其返回给父窗口,你可以使用`window.showModalDialog`并在对话框中设置一个提交按钮,当点击按钮时,将数据通过`window.returnValue`返回给父窗口: ```javascript // 在对话框页面的脚本中 function submitData() { var inputData = document.getElementsByName("inpu")[0].value; window.returnValue = inputData; // 设置返回值 window.close(); // 关闭对话框 } ``` 然后在父窗口中,你可以捕获返回的值并更新相应元素: ```javascript var result = window.showModalDialog("dialog.html", self, "dialogWidth:400px;dialogHeight:300px;"); if (result !== null) { document.getElementById("name").value = result; } ``` 总结来说,`window.showModalDialog()`提供了一种不同方式来与父窗口交互,主要通过`dialogArguments`传递数据,而不是像`window.open()`那样使用`window.opener`。理解这些差异对于正确地在JavaScript中处理窗口间的通信至关重要。
- 粉丝: 3
- 资源: 903
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- DingTalk Design CLI是面向钉钉三方前端应用研发的命令行工具.zip
- Gridsome前端框架,一键部署到云开发平台.zip
- 基于xxl-job的Java增强包设计源码,支持注册中心与自动管理
- 基于Java与前端技术的开源企业培训系统设计源码
- python3 django3 结合Vue.js框架构建前后端分离web开发.zip
- Aurora前端实现(基于Vue.js + Bulma + Element开发).zip
- creator开发前端框架.zip学习资料
- 基于Java语言实现的图灵院第二次项目五子棋小游戏设计源码
- SAHX-Admin-iview 是套功能较为完整的后台管理系统架构, 以Thinkjs作为中间层, Vuejs作为前端模块化开发, iview作为前端UI.zip
- Automan一站式前端开发框架.zip学习资料
评论0