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

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 οnkeydοwn="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 " οnclick='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 " οnclick=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();

}

}

转载于:https://www.cnblogs.com/cosiray/archive/2009/08/22/1551942.html

模式窗口showModalDialog的用法总结相关推荐

  1. 关于模态窗口(showModalDialog)的专题【收藏】

    关于模态窗口(showModalDialog)的专题[收藏] 转自:http://www.cnblogs.com/donnet/articles/1039509.html 1.模态窗口的打开,mode ...

  2. 来个模态kuang_关于模态窗口(showModalDialog)的专题【收藏】

    转自:http://www.cnblogs.com/donnet/articles/1039509.html 1.模态窗口的打开,model window open 2.模态窗口的关闭,model w ...

  3. sharepoint 2010 默认弹出模式窗口最大化default showModalDialog maximize

    记录一下如何在sharepoint 2010 弹出模式窗口最大化的方法. 前面提到关于sharepoint 2010 弹出模式窗口showModalDialog并返回值returnResult方法,知 ...

  4. 模式窗口window.showModalDialog()的用法

    模式窗口的用法 一.问题: 我想弹出一个窗口,然后在弹出的窗口里,选择或输入一些信息,要求这些信息返回到父页面. 建立父页面:a.htm <html> <head>     & ...

  5. window.showModalDialog模式窗口无法在子窗口访问解决办法

    window.showModalDialog打开的模式窗口无法在子窗口访问 如:window.showModalDialog("A.aspx", null, "help: ...

  6. 模式窗口 window.showmodaldialog 总结

    就是要在一个图像插件上面,需要弹出一个窗口,在弹出的窗口之上又的弹出一个模式窗口.然后我用到了window.showmodaldialog 方法 1.参数 showModalDialog("子页面地址 ...

  7. 模式窗口(Modal Dialog) 导致 Session丢失的解决办法

    模式窗口就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口. 在使用Modal Dialog的时候,弹出多个页面会导致页面新页面session 丢失, 需要重新 log ...

  8. 模式窗口window.open造成Session丢失的解决方法

    从 HTML 模式或无模式对话框可能没有打开同一进程中 InternetExplorer 窗口中打开,因此模式窗口中调用 window.open()方法打开具体页面,可能造成session 丢失.例如 ...

  9. 如何在网页中弹出的模式窗口,就像C/S中的SHOWMODAL类型窗口

    在网页中弹出的模式窗口的函数为:  window.showModalDialog(sURL   [,   vArguments]   [,   sFeatures]) 1.模态窗口的打开,model ...

最新文章

  1. 自定义通知与系统通知的学习(详解)
  2. odoo开发笔记:前端显示强制换行
  3. leetcode145. 二叉树的后序遍历
  4. HTML语义化的理解
  5. 心情沮丧的时候可以这样做
  6. web加减乘除法c#_c# 两个数的加减乘除
  7. MYSQL 主从复制读写分离实现
  8. 在线文本转二进制工具
  9. 运维角度浅谈MySQL数据库优化
  10. CodeForces Gym 100935E Pairs
  11. blob类型对象转为file类型对象
  12. 硅谷女孩火了,更该让他们开始学编程
  13. 用什么软件测试微信朋友圈被屏蔽,怎么检测朋友圈被屏蔽?清师傅帮你
  14. DNS 智能解析功能评测之国内部分总结篇~
  15. 指数灰度变换法 matlab,matlab指数灰度变换
  16. 今日小程序推荐:纸塘-这个壁池真高清!
  17. 云聚高性能,论道“新超算”
  18. 【华人学者风采】麦立强 武汉理工大学
  19. matlab曲线导入cad,MATLAB导入CAD数据.docx
  20. 不同坐标系BIM模型导出参数配置

热门文章

  1. nginx配置跨域、gzip加速、代理详细讲解
  2. 第二篇:在RHEL上用qemu-kvm安装xp
  3. 像狗皮膏药一样的图片拖拉操作
  4. 早上发现还是问题不断
  5. 转载—android 媒体库数据更新解决办法总结
  6. Spring自学日志06(Aop)
  7. FTP服务器配置固定IP才能访问
  8. 【转载】(Git)用动图展示10大Git命令
  9. gradle 项目打包成多个jar包_永不失优雅——高效管理Springboot项目
  10. 事件循环机制 + ES7:Async/Await(基于generator原理实现)附详细示例分析