【问题与解决】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,"dialogWidth=500px;dialogHeight=300px");
if (retval == null) {
...
}else {
...
}

浏览器报错:

Uncaught TypeError: undefined is not a function

其中有些临时解决办法,但貌似showModalDialog不会回来了。

问题解决

常见的弹出窗口有div模拟或者用window.open代替,对于一个已经在用的系统来说,采用div方式转换成本较高,采用window.open改动会更少一些,但也会丢失其模态性。

这里采用简单的window.open方案,毕竟替换成本低很多。针对上文中提到的showModalDialog使用方式,替换为:

var iWidth = 500;
var iHeight = 300;
var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
var win = window.open("request.aspx", "弹出窗口", "width=" + iWidth + ", height=" + iHeight + ",top=" + iTop + ",left=" + iLeft + ",toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no,alwaysRaised=yes,depended=yes");

参数说明

dialogWidth:对话框宽度。
dialogLeft:距离桌面左的距离。
dialogTop:离桌面上的距离。
center:{yes|no|1|0}:窗口是否居中,默认yes,但仍可以指定高度和宽度。
help:{yes|no|1|0}:是否显示帮助按钮,默认yes。
resizable:{yes|no|1|0}[IE5+]:是否可被改变大小。默认no。
status:{yes|no|1|0}[IE5+]:是否显示状态栏。默认为yes[Modeless]或no[Modal]。
scroll:{yes|no|1|0|on|off}:指明对话框是否显示滚动条。默认为yes。 还有几个属性是用在HTA中的,在一般的网页中一般不使用。 dialogHide:{yes|no|1|0|on|off}:在打印或者打印预览时对话框是否隐藏。默认为no。
edge:{sunken|raised}:指明对话框的边框样式。默认为raised。
unadorned:{yes|no|1|0|on|off}:默认为no。

采用这种方式就可以打开一个和之前使用showModalDialog差不多的窗口。但是怎么返回值呢?

在弹出页面中有两种方式:

1、直接设置父窗口的DOM对象的值。

window.opener.document.getElementById(“parentWindowControlId”).value = "数据";

父窗口中应该有一个id为parentWindowControllId的DOM元素。

2、调用父窗口中的Javascript函数,由父窗口进行相应的处理。

var obj = { id:"id", name:"name" };  window.opener.DoAfterXXX(obj);

父窗口提供一个DoAfterXXX的函数就可以了。

长远来看window.open由于其用户体验问题必将走向没落,还是尽快转移为好。

原文地址:https://www.cnblogs.com/yc-755909659/p/9641868.html

时间: 2024-10-04 23:21:33

【问题与解决】showModalDialog is not defined 的解决方案的相关文章

jQuery is not defined 错误,解决方案

jQuery is not defined 错误,解决方案 通常出现这种状况有几种解决方法: 1:查看是否引入jquery文件 2:查询路径是否错误,可以在页面源码中点击js文件路径. 3: JS是解释型语言,是根据标签引用分块顺序执行的,$是jQuery中的产生的对象,需要用的话,必须将jquery.js文件放在使用它的JS前面. 详情查看:http://blog.csdn.net/zhanwentao2/article/details/6943880

【已解决】DataNode 无法正常启动解决方案

1. 原因一 在 start-all.sh 之后 DataNode 无法正常启动,单独启动也启动不了 可能的原因 多次格式化,导致 NameNode 和 DataNode 的集群 id 不匹配 DataNode 无法启动 验证 查看对应主机的相关日志信息,位置在 /soft/hadoop/logs 查看 hadoop-centos-datanode-s101.log 文件 java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-ce

Easygui报错解决(仅解决easygui is not defined)

仅提供一种思路,按照这个思路你也可以去轻松解决msgbox找不到的问题,在这里就不赘述msgbox的解决方法了, 首先要告诉你们,我的gui版本是0.97.3的,这类问题,解决这类问题大同小异,懂思路了,很简单 开始了:========= 根据提示信息,__init__=easygui.__all__ 说明该模块的初始化列表是根据easygui的初始化列表,所以可以肯定,在easygui初始化列表中肯定没有easygui引导,去添加就可以了,在easygui.py文件初始化列表中添加easygu

解决showModalDialog和chrome不兼容的其他方法

父页面放一个图形按钮和一个TEXTBOX,代码如下: <asp:TextBox ID="sku_id" runat="server" AutoPostBack="True" onclick="receipt_search_sku_Click" CausesValidation="True"></asp:TextBox> <asp:ImageButton ID="rec

window.showModalDialog乱码(完美)解决方案

关于jsp弹出jsp页面传参数中文乱码的问题解决: 弹出方式--window.showModalDialog(requestURL,null,strFeatureInfo); 乱码原因:url传递方式对中文进行了编码 解决方法:showModalDialog方法的第二个参数就是用于解决传参数问题.不必要去构造url传参. 页面1代码 var obj = new Object(); obj.ruleId="15"; obj.ruleName="名称测试"; obj.r

DescriptionResourcePathLocationType Target runtime com.genuitec.runtime.generic.jee60 is not defined.project2UnknownFace 解决方案

[1]import导入以前的项目,项目上有一个红叉,其他的地方没有错误,但不影响操作. 报错信息:Description Resource Path Location Type Target runtime com.genuitec.runtime.generic.jee60 is not defined. project2 Unknown Faceted Project Problem 解决办法: 在本地找到工程目录下的.settings下的org.eclipse.wst.common.pro

UEditor 报错 uParse is not defined 的解决方案

在vue中是用来百度富文本编辑器,但是在加载过程中报错 uParse is not defined,如下.按照官方说明进行操作,证明使用没有热任何问题. 解决方案思路如下: 首先发现报错位置在这里ueditor.parse.min.js?e487:7:ok先直接把该文件的引入注释掉. 然后发现运行正常,编辑器也能正常显示: 那么这个文件不引入会有什么影响,咱移步官方文档看该文件说明. 说明这个文件只是一个简易版,不引入也没什么大的影响,但是后来发现不引入回事富文本编辑器的样式丢失.ok针对这个问

【已解决】Windows下 MySQL大小写敏感 解决方案及分析

Windows下 MySQL大小写敏感配置 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-3-27 最近在window系统下 操作Linux系统下创建的数据库,发现有些不对劲,比较了半天才发现是大小写敏感的问题造成的.网上搜索了一下,解决了这个问题,做个简明扼要的记录. 按照网上的说明: WINDOWS: 编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_n

记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务. 问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视.原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!! 我尝试解决该问题,so,有个这个日志. 方案概述 方案一:优化现有mysql数据库.优点:不影响现有业务