解决window.showModalDialog在Firefox无法支持

在网页程序中,
有时我们会希望使用者按下按钮后开启一个保持在原窗口前方的子窗口,
而在IE中,我们可以使用showModalDialog来达成,
语法如下 :

vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

范例:

window.showModalDialog("openwin.html","Arguments","dialogHeight: 200px; dialogWidth: 200px; dialogTop: 10px;dialogLeft: 10px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");

但是.在Firefox中却没有showModalDialog这东西,
而在FireFox中我们只能使用window.open实现这样的功能,
window.open的语法如下 :

oNewWindow = window.open( [sURL] [, sName] [, sFeatures] [, bReplace])

只是,在Firefox下,window.open的参数中,sFeature多了一些功能设定,
而在FireFox下要让开启的窗口跟IE的showModalDialog一样的话,
只要在sFeatures中加个modal=yes就可以了,
范例如下:

window.open(‘openwin.html‘,‘newWin‘,‘modal=yes,width=200,height=200,resizable=no,scrollbars=no‘);

提到了子窗口,不得不提的就是子窗口跟母窗口间的交互操作,
因为我想很多人开启对话窗口应该都是为了将操作完的结果丢回去给母窗口...

如果是用showModalDialog的话,
在子窗口中要存取母窗口的函数的话,
要注意两个地方,
1.(母窗口中)开启窗口:

window.showModalDialog("openwin.html",self,‘modal=yes,width=775,height=700,resizable=no,scrollbars=no‘);

在第二个参数(vArguments),改成self.

2.(子窗口中)调用母窗口的函数:

window.dialogArguments.ShowMsg(obj.value);

ShowMsg为母窗口中的函数.

而使用window.open的话,
则是要注意一个地方,
1.(子窗口中)调用母窗口的函数:

window.opener.ShowMsg(obj.value);

使用window.opener去接母窗口的对象.

如此一来,只要再透过navigator.appName去判断浏览器为何,
就可以写一个IE与FireFox兼容的函数...

例子如下:

在一个父窗口中打开一个子窗口,并把子窗口的值传递给父窗口

在父窗口中:

<script language="JavaScript">
function colorpick(obj){
if (window.showModalDialog!=null)//IE判断
{
var smd= window.showModalDialog("Default2.aspx","","dialogWidth:225px;dialogHeight:170px;status:no;help:no;scrolling=no;scrollbars=no");
if(smd!=null)
obj.style.background=rtn;
return;
}
else
{
this.returnAction=function(strResult){
if(strResult!=null)
obj.style.background=strResult;
}
window.open("Default2.aspx","","width=225,height=170,menubar=no,toolbar=no,location=no,scrollbars=no,status=no,modal=yes");
return;
}

}
</script>

在子窗口中:

function act(RGB) {
if (window.showModalDialog!=null)//IE判断
{
parent.window.returnValue="#"+RGB;
window.close();//firefox不支持

}
else
{
window.opener.returnAction("#"+RGB);
top.close();//IE和FireFox都支持
}
}

时间: 2024-11-08 18:33:14

解决window.showModalDialog在Firefox无法支持的相关文章

兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法

兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法 // 获取事件function getEvent(){ if(window.event) {return window.event;} func=getEvent.caller; while(func!=null){ var arg0=func.arguments[0]; if(arg0){ if((arg0.constructor==Event || arg0.constructor ==MouseEv

解决chrome浏览器无法得到window.showModalDialog返回值的问题

父页面处理: function ProductList() {   var TypeID = window.document.getElementById("Type").value;   var returnvalues = window.showModalDialog('ProductList.aspx?Type=' + TypeID,'window','dialogWidth=700px;dialogHeight=680px');    if(returnvalues!=unde

JavaScript中的window.close在FireFox和Chrome上不能正常动作的解决方法

原文:JavaScript中的window.close在FireFox和Chrome上不能正常动作的解决方法 JS中关闭窗口的方法window.close()在IE上能够正常动作,而在FireFox和Chrome上无法动作. (当时,在Chrome35.0上的时候还是可以的,Chrome36.0上就无法动作了JS中关闭窗口的方法window.close()在IE上能够正常动作,而在FireFox和Chrome上无法动作. (当时,在Chrome35.0上的时候还是可以的,Chrome36.0上就

JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

一.Iframe 篇 公共部分 //父对象得到子窗口的值 //ObjectID是窗口标识,ContentID是元素ID function GetValue(ObjectID,ContentID) { var IsIE = (navigator.appName == 'Microsoft Internet Explorer') if(IsIE) {//如果是IE alert(document.frames(ObjectID).document.getElementById(ContentID).i

总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

http://hi.baidu.com/yashua839/blog/item/131fdb2fe547ef221f3089af.html一.Iframe 篇 //&&&&&&&&&&&&&&&&&&&&公共方法开始&&&&&&&&&&&&&&a

window.open()和window.showModalDialog

零.window.open()和window.showModalDialog 本人在使用时主要实现如下个功能, 以对话框形式弹出画面,且要求对话框置顶,不可操作其他画面,并且关闭画面时刷新父页面. window.open 可实现以对话框形式弹出画面,并且关闭画面时刷新父页面.但"对话框置顶,不可操作其他画面"本人并未找到方法. //刷新父页面 Response.Write("<script>window.opener.location.href=window.op

用window.showModalDialog()打开的页面Request.UrlReferrer为null

今天在解决一个问题,怎么也找不到解决方案.我的一个窗体是IE通过window.showModalDialog()打开的,但为了防止用户手工输的地址,所以我需要判断是通过别的页面调整获得,用Request.UrlReferrer判断,在IE下其值却为null,chrome是正确的,在IE下每次打开页面都提示重新登录,这我就郁闷了,我搜索了很多文档,又说location.herf打开的页面Request.UrlReferrer==null,却很少提window.showModalDialog()打开

【问题与解决】showModalDialog is not defined 的解决方案

背景: showModalDialog 是比较老的方法了,有些浏览器不再支持弹出模态窗口了. 比如说谷歌浏览就不再支持了,有文章说明如下: Chrome’s Lack of Support for showModalDialog Breaks Some Enterprise Web Apps 弹出窗口代码: var obj = new Object(); var retval = window.showModalDialog("request.aspx",obj,"dialo

window.showModalDialog()之返回值

window.showModalDialog的基本用法 showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框. window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框. 使用方法: vReturnValue = window.showModalDialog(sURL [, vArgument