window.open实现模式窗口
看了些文章,实现模式窗口有两种方式。window.showModalDialog以及window.open。
一、方式介绍
window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+
showModalDialog() (IE 4+ 支持)
showModelessDialog() (IE 5+ 支持)
window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。
由此可见,showModalDialog是IE的语法,其他浏览器并不支持。showModalDialog很好用,但是由于这个原因,有些需要支持多种浏览器客户端的情况就不能使用这个方法。
二、window.open()基本语法:
window.open(pageURL,name,parameters)
其中:
pageURL 为子窗口路径
name 为子窗口句柄
parameters 为窗口参数(各参数用逗号分隔)
三、实现模式窗口
有文章说parameters 中有一个参数modal=yes(dialog=yes效果一样),如果设定即为模式窗口。但是经笔者测试,增加这个参数,只是使弹出的窗口的最大化按钮为不可用,只是和不加该参数的唯一区别。此时,同样可以操作父窗口。这并不是我想要的模式窗口,我想要的是子窗口弹出后,在子窗口不关闭的情况下是不能操作父窗口的。最后发现很简单的一句话就可以完成这个功能,在body中加入 onBlur="window.focus();" 即可。
但是这样还是有问题的,子窗口的任何输入操作都是不被允许的,只有按钮可以点击。
修改一下:
var result= window.open("URL","window","width=600px,height=400px, modal=yes,status=no");
window.onfocus=function (){result.focus();};
window.onclick=function (){result.focus();};
这样可以在点击父窗口的时候,将焦点赋予子窗口。
还有一个更好的通用的办法。
引用:真正能够解决Dialog问题的方案只有一个,那就是Float Iframe,用Iframe代替Window.open(),用DIV来做遮罩,控制模态。而且,这样做还有另外一个好处,那就是处理窗口间的关系变得异常容易。用户也不容易ganjue到自己被打扰了——因为你可以让Iframe加载完成时再显示出来,甚至可以加上一些特效,使得Iframe的浮出更加柔和自然。
四、操作父窗口参数
弹出窗口中:
<script>
window.onload=function(){
opener.document.all.obj.value=返回的值
}
</script>
window.open实现模式窗口的更多相关文章
- window.open实现模式窗口(只弹出一个window.open)
父页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...
- window.showModalDialog刷新父窗口和本窗口的方法及注意
window.showModalDialog刷新父窗口和本窗口的方法及注意: 一.刷新父窗口的方法: A.使用window.returnValue给父窗口传值,然后根据值判断是否刷新. 在w ...
- Qt中的非模式窗口配置;
Test7_5A::Test7_5A(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); m_searchwin = new Searc ...
- 转:模式窗口showModalDialog的用法总结
模式窗口showModalDialog的用法总结 最近几天一直在处理模式窗口的问题,索性写了这篇总结,以供参考: 1.打开窗口:var handle = window.showModalDialo ...
- [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口
原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我 ...
- window.open()打开新窗口教程
使用 window 对象的 open() 方法可以打开一个新窗口.用法如下: window.open (URL, name, features, replace) 参数列表如下: URL:可选字符串, ...
- window.open打开新窗口被浏览器拦截的处理方法
一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...
- 模式窗口刷新不弹出新窗口触发NET事件
最近做项目的时候用到模式窗口,这个东西我从来没有用过,事实上我是讨厌用这个东西,由于项目需要也只好忍着了.在实现的时候发现了一个问题,打开一个模式窗口后如果里面有asp.net控件并绑定有后台事件的话 ...
- [ucgui] 对话框7——按钮触发与模式窗口
>_<" 模式窗口,只有结束该窗口时才能聚焦到其他的窗口上~
随机推荐
- DALSA相机开发--修改参数
DALSA gige相机有两种方式可以获取到相机相关参数,一个是读取相机里面的xml文件:另外一个是读取相对应的寄存器的值. 对于修改寄存器的值,有两个相应的函数: 1)GevSetFeatureVa ...
- 使用Fiddler进行手机端抓包
1.手机和电脑在同一局域网 2.在电脑上查看ip地址 3.如果是需要抓取https,则需要在浏览器中输入http://xxx.xxx.x.xxx:8888(第二部查到的ip地址 + Fiddler 的 ...
- python中__init__ ,__del__ &__new__
__new__ __new__方法是用来创建对象,__new__方法需要有一个返回值,这个返回值表示创建出来的对象的引用 __init__ __init__方法在类的一个对象被建立时 ,马上执行.__ ...
- 请在微信客户端打开链接 html
1 前言 有时候,需要链接只能在微信上打开,如果不是,则提示请在微信客户端打开链接的字眼的网页,网页代码如下:(这个是网页应用授权时,非微信上打开,就会出现,然后把它单独拿出来了) 2 代码 < ...
- Dubbo原理解析-Dubbo内核实现之SPI简单介绍
转自:https://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 Dubbo 采用微内核+插件体系,使得设计优雅,扩展性强.那所谓 ...
- JAVA实现网络文件下载
HttpURLConnection conn = null; OutputStream outputStream = null; InputStream inputStream = null; try ...
- python-进程池与线程池,协程
一.进程池与线程池 实现并发的手段有两种,多线程和多进程.注:并发是指多个任务看起来是同时运行的.主要是切换+保存状态. 当我们需要执行的并发任务大于cpu的核数时,我们需要知道一个操作系统不能无限的 ...
- 一切皆Socket
“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. socket()函数介绍 socket函数介绍 函数原型 domai ...
- Webform中<%%>
其实<%%>很早之前就见过了,只是会用一点功能,其它的不甚了解.今天偶尔见到了它的庐山真面目,现在共享给大家. 语法 代码块呈现(<%%>)定义了当呈现页时执行的内联代码或内联 ...
- python中的zip、map、reduce 、lambda、filter函数的使用
飞机票 lambda函数 lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是 ...