showModalDialog 和 showModelessDialog


Posted in Javascript onJanuary 22, 2007

关于showModalDialog和showModelessDialog的使用,一个b/s结构的项目中用window.open弹出的窗口被一些广告拦截工具给拦截了,没办法就只能用showModalDialog来解决问题,但showModalDialog这个方法不好的就是页面间传值太麻烦(传值有两种方法),可是实在没其他的办法来解决这个拦截问题,只有用这个了。代码到是两下就写好了,但调试代码的时候发现一个问题,用showModalDialog弹出的窗口中的内容一直是第一次访问页面时显示的内容,开始就怀疑是窗体调用的页面缓存,最后通过单步跟踪调试也证明了问题确实是读取的页面缓存,这说明了在asp.net中用showModalDialog和showModelessDialog做弹出窗体时最好在page_load事件加上 Response.Expires = 0; 
Response.Cache.SetNoStore(); 
 Response.AppendHeader("Pragma", "no-cache"); 
来清除缓存。用asp,php,js,vbscript测试使用showModalDialog方法没有出现需要清除缓存的情况,大家可以放心使用,关于showModalDialog的时候可以参见下面我找到的详细介绍

showModalDialog和showModelessDialog使用心得 

一、showModalDialog和showModelessDialog有什么不同?

showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。

showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P)

二、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?

在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的。

三、怎样才刷新showModalDialog和showModelessDialog里的内容?

在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:

<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>

将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。

注意:如果想当访问的时候自动刷新,可以在被打开得页面,设置一个记录变量,当被打开模态窗口得时候,变量至1,然后使用上述方法刷新模态窗口,当关闭窗口得时候,变量至0.

四、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。

<input type="button" value="关闭" onclick="window.close()">

也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。

五、showModalDialog和showModelessDialog数据传递技巧。

例子:

现在需要在一个showModalDialog(或showModelessDialog)里读取或设置一个变量var_name

一般的传递方式:

window.showModalDialog("filename.htm",var_name)

//传递var_name变量

在showModalDialog(或showModelessDialog)读取和设置时:

alert(window.dialogArguments)//读取var_name变量

window.dialogArguments="oyiboy"//设置var_name变量

这种方式是可以满足的,但是当你想在操作var_name同时再操作第二个变理var_id时呢?就无法再进行操作了。这就是这种传递方式的局限性。


以下是我建议使用的传递方式:

window.showModalDialog("filename.htm",window)

//不管要操作什么变量,只直传递主窗口的window对象

在showModalDialog(或showModelessDialog)读取和设置时:

alert(window.dialogArguments.var_name)//读取var_name变量

window.dialogArguments.var_name="oyiboy"//设置var_name变量

同时我也可以操作var_id变量

alert(window.dialogArguments.var_id)//读取var_id变量

window.dialogArguments.var_id="001"//设置var_id变量

同样还可以对主窗口的任何对象进行操作,如form对象里的元素。

window.dialogArguments.form1.index1.value="这是在设置index1元素的值"

六、多个showModelessDialog的相互操作。

以下代码的主要作用是在一个showModelessDialog里移动别一个showModelessDialog的位置。

主文件的部份js代码。

var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px") //打开控制窗口

var s2=showModelessDialog('about:blank',window,"dialogTop:200px;dialogLeft:300px")

//打开被控制窗口

控制.htm的部份代码。

<script>

//操作位置数据,因为窗口的位置数据是"xxxpx"方式的,所以需要这样的一个特殊操作函数。
 function countNumber(A_strNumber,A_strWhatdo)
 {
  A_strNumber=A_strNumber.replace('px','')
  A_strNumber-=0
  switch(A_strWhatdo)
  {
  case "-":A_strNumber-=10;break;
  case "+":A_strNumber+=10;break;
  }
  return A_strNumber + "px"
 }

</script>

<input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'-')" value="上移">

<input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'-')" value="左移">

<input type="button" onclick="window.dialogArguments.s2.dialogLeft=countNumber(window.dialogArguments.s2.dialogLeft,'+')" value="右移">

<input type="button" onclick="window.dialogArguments.s2.dialogTop=countNumber(window.dialogArguments.s2.dialogTop,'+')" value="下移">

以上关键部份是:

窗口命名方式:var s1=showModelessDialog('控制.htm',window,"dialogTop:1px;dialogLeft:1px")

变量访问方式:window.dialogArguments.s2.dialogTop

这个例子只是现实showModelessDialog与showModelessDialog之间的位置操作功能,通过这个原理,在showModelessDialog之间相互控制各自的显示页面,传递变量和数据等。这要看各位的发挥了。

Javascript 相关文章推荐
Javascript注入技巧
Jun 22 Javascript
javascript div 弹出可拖动窗口
Feb 26 Javascript
jQuery.buildFragment使用方法及思路分析
Jan 07 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
JQuery鼠标移到小图显示大图效果的方法
Jun 10 Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
利用Vue实现移动端图片轮播组件的方法实例
Aug 23 Javascript
AngularJS 前台分页实现的示例代码
Jun 07 Javascript
基于JS实现简单滑块拼图游戏
Oct 12 Javascript
javascript 中对象的继承〔转贴〕
Jan 22 #Javascript
利用javascript中的call实现继承
Jan 22 #Javascript
Javascript里使用Dom操作Xml
Jan 22 #Javascript
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 #Javascript
写的htc的数据表格
Jan 20 #Javascript
共享自己写一个框架DreamScript
Jan 20 #Javascript
javascript读取RSS数据
Jan 20 #Javascript
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
Python多线程编程(一):threading模块综述
2015/04/05 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
初一英语教学反思
2014/01/11 职场文书
大学生活动总结模板
2014/07/02 职场文书
2014年环保局工作总结
2014/12/11 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
ES6 解构赋值的原理及运用
2021/05/25 Javascript
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL