模式窗口showModalDialog的用法总结

 

最近几天一直在处理模式窗口的问题,索性写了这篇总结,以供参考:

1。打开窗口:
var handle = window.showModalDialog(url, objects, feathers);
其中:objects可以为参数(包括数组),也可以是对象。
通常的用法 objects = {window} ,把父窗体的对象共享给子窗体。

2。关闭子窗口:
window.close();

3。从子窗体传参数给父窗体:
window.returnVal = string;

3。清除缓存,防止模式窗口页面不更新的情况:
HTML
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Mon, 23 Jan 1978 20:52:30 GMT">
ASP
<%
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = "no-cache"
%>
PHP
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
JSP
response.setHeader("Pragma","No-Cache");
response.setHeader("Cache-Control","No-Cache");
response.setDateHeader("Expires", 0);

4。防止打开新窗口(如提交表单):
<base target="_self">

5。在模式窗口使用F5刷新页面:
<base target="_self">
<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>
其中:filename为窗口页面。

6。防止模式窗口打开的页面出现cookie丢失的情况:
模式窗口打开新窗口时,仅可以使用 showModalDialog(url,window,feathers); 方法,且 objects 为 window 。

7.在弹出窗口中获得或设置主窗口的任何值:
打开弹出窗口时用:showModalDialog(url, window, feathers)
在弹出窗口中使用 window.dialogArguments 对象(即主窗口传递过来的 window 对象集),即可以获得或者设置主窗口的值。

在ModalDialog中操作父窗口对象

文/Ray

1、不能使用window.parent

Window.parent是用来在frame中进行操作的,在对话框中不能用来操作父窗口对象

2、正确的做法

调用modaldialog时通过传参数的方式操作

例:

需求

父窗口页面为a.html 子窗口页面为b.html。a.html中有文本框id为test1,在打开的对话框中点击按钮,将a.html的文本框值改为“子窗口值”。

实现

打开对话框时把test1作为参数传给子窗口,在子窗口中获取参数,将参数对象(即a.html中传过来的text对象)的value属性值设置为“子窗口值”

注意:这里只能传id,不能传name

a.html代码如下

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>a.html</title>

</head>

<body>

<input type=text id=test1 value=''>

<input type=button value=" OK " onclick='window.showModalDialog("b.html", test1)'>

</body>

</html>

b.html代码如下

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>b.html</title>

<script language=javascript>

function func1(){

//获取父窗口传过来的参数

var ptextid = window.dialogArguments;

if(ptextid != undefined){

//将父窗口传过来的对象的值改为“子窗口值”

ptextid.value = "子窗口值";

//关闭子窗口

window.close();

}

}

</script>

</head>

<body>

<input type=button value=" OK " onclick=func1()>

</body>

</html>

如果需要操作的父窗口对象比较多,也可以将window或window.document作为参数传给子窗口。

例:

需求

a.html中添加id为“aform”的的form,form中有id为test2的文本框,在b.html中,除了进行上面的操作之外,还要将test2的值改为“子窗口值2”,并将form提交到c.html。

实现1

将a.html中打开对话框的函数改为如下方式:

window.showModalDialog("b.html", window.document);

将b.html中func1()改为如下:

function func1(){

var pdoc = window.dialogArguments;

if(pdoc!=undefined){

pdoc.all.test1.value="子窗口值";

pdoc.all.test2.value="子窗口值2";

pdoc.all.aform.action="c.html";

pdoc.all.aform.submit();

}

}

实现2

因为在子窗口中对父窗口进行的操作比较多,也可以采用execScript的方式实现。

将a.html中打开对话框的函数改为如下方式:

window.showModalDialog("b.html", window);

添加javascript函数如下

function func(){

test1.value="子窗口值";

document.all.test2.value="子窗口值2";

aform.action="c.html";

aform.submit();

}

将b.html中func1()改为如下:

function func1(){

var pwin = window.dialogArguments;

if(pwin!=undefined){

var codeStr = "func();"

pwin.execScript(codeStr,"javascript");

window.close();

}

}

转:模式窗口showModalDialog的用法总结的更多相关文章

  1. window.open实现模式窗口

    看了些文章,实现模式窗口有两种方式.window.showModalDialog以及window.open. 一.方式介绍 window.open()支持环境: JavaScript1.0+/JScr ...

  2. 18. 视图Ext.Viewport和窗口Ext.Window用法

    转自:http://www.cnblogs.com/linjiqin/archive/2011/06/22/2087003.html 视图Ext.Viewport和窗口Ext.Window用法. 1. ...

  3. 模式窗口刷新不弹出新窗口触发NET事件

    最近做项目的时候用到模式窗口,这个东西我从来没有用过,事实上我是讨厌用这个东西,由于项目需要也只好忍着了.在实现的时候发现了一个问题,打开一个模式窗口后如果里面有asp.net控件并绑定有后台事件的话 ...

  4. [ucgui] 对话框7——按钮触发与模式窗口

    >_<" 模式窗口,只有结束该窗口时才能聚焦到其他的窗口上~

  5. 视图Ext.Viewport和窗口Ext.Window用法

    Viewport不需要再指定renderTo,而我们也看到Viewport确实填充了整个浏览器显示区域,并会随着浏览器显示区域大小的改变而改改.他有三个特点: 1).创建即可使用.不需要渲染,当组件在 ...

  6. Qt中的非模式窗口配置;

    Test7_5A::Test7_5A(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); m_searchwin = new Searc ...

  7. [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

    原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我 ...

  8. 模态窗口showModalDialog的浏览器兼容解决方案【改】

    将代码中原来的 window.showModalDialog 全部替换成: showModalDialogN 然后增加方法: function showModalDialogN(uri, args, ...

  9. Windows 进入上帝模式窗口

    Win10上帝模式如何启用? 默认情况下,Win10的上帝模式是隐藏的,如果要开启的话,操作步骤也非常简单,下面就介绍两种方法. 方法一.直接运行命令行 1.使用[Win + R ]快捷键打开“运行” ...

随机推荐

  1. Python使用selenium进行爬虫(一)

    JAVA爬虫框架很多,类似JSOUP,WEBLOGIC之类的爬虫框架都十分好用,个人认为爬虫的大致思路就是: 1.挑选需求爬的URL地址,将其放入需求网络爬虫的队列,也可以把爬到的符合一定需求的地址放 ...

  2. CSS布局技巧之——各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  3. SPEC CPU 2006编译perl 出错:undefined reference to `pow'

    问题来源: 编译spec2006时,出现如下错误: cc -L/home/yrtan/benchmark/2006/CPU2006v1.0.1/tools/output/lib -L/usr/loca ...

  4. Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)'''from seleni ...

  5. Eclipse中添加MyEclipse插件

    下载准备: 下载myeclipse7.0:http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0M1/MyEclipse ...

  6. Contour Features 边界特征

    查找轮廓 findContours   cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) → image ...

  7. AWVS12 防止反复注册

    以管理员权限运行cmd,输入以下内容: cacls "C:\ProgramData\Acunetix\shared\license." /t /p everyone:r 如图:

  8. Expires和Cache-Control

    本文原链接:https://blog.csdn.net/zhouziyu2011/article/details/71312452 浅谈前端性能优化(一)——Expires和Cache-Control ...

  9. MySQL对数据库数据进行复制的基本过程详解

    MySQL对数据库数据进行复制的基本过程详解 这篇文章主要介绍了MySQL对数据库数据进行复制的基本过程,解读了Slave的一些相关配置,需要的朋友可以参考下 复制 复制是从一个MySQL服务器(ma ...

  10. 01_6_SERVLET如何从上一个页面取得参数

    01_6_SERVLET如何从上一个页面取得参数 1. sevlet实现 public void doGet(HttpServletRequest request, HttpServletRespon ...