chrome对showModalDialog方法是不兼容的,现在有年代久远的项目,是用的window.showModalDialog方式打开模态窗口,但现在提出有兼容性问题。

对此,我的解决方案是通过window.open的方式来解决。

1.showModalDialog方法的执行是阻塞的,而open不是。

showModalDialog好比是同步的,而open是异步,想要解决此问题,可以在子窗口中调用父窗口的方法把返回值传回去。

2.showModalDialog发打开的窗口是模态,而open不是。

没有找到此问题的完美解决方案,我所想的是在父窗口定义一个常量hasOpenWindow,打开窗口时将其改为true,当期为true时,将焦点定位在刚才打开的窗口而不去新建,在父窗口的回掉函数中再将此常量改为false。

以下是chromeWindowShowModalDialog.js

 1 /**
 2  * 打开方式对比:
 3  *     window.open("Sample.htm",null,"height=200,width=400,status=yes,toolbar=no,menubar=no");
 4  *     window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px");
 5  *     因window.showmodaldialog 与 window.open 参数不一样,所以封装的时候用正则去格式化一下参数
 6  * 
 7  * 定义一个全局变量<has_showModalDialog>判定是否有原生showModalDialog方法
 8  * 如果它不存在,自定义window.showModalDialog
 9  * 
10  * if (window.opener != undefined && window.opener._doChromeWindowShowModalDialog) {
11  *         window.opener.__doChromeWindowShowModalDialog(tmplInfo);//for chrome
12  *     }else{
13  *         window.returnValue = tmplInfo;
14  *     }
15  */
16 var has_showModalDialog = !!window.showModalDialog;
17 if(window.showModalDialog == undefined){
18     window.showModalDialog = function(url,mixedVar,features){
19         if(window.hasOpenWindow){
20             window.myNewWindow.focus();
21             return;
22         }
23         window.hasOpenWindow = true;
24         if(mixedVar) var mixedVar = mixedVar;
25         if(features) var features = features.replace(/(dialog)|(px)/ig,"").replace(/;/g,',').replace(/\:/g,"=");
26         var left = (window.screen.width - parseInt(features.match(/width[\s]*=[\s]*([\d]+)/i)[1]))/2;
27         var top = (window.screen.height - parseInt(features.match(/height[\s]*=[\s]*([\d]+)/i)[1]))/2;
28         url = url + "&temp=" + Math.random();
29         window.myNewWindow = window.open(url,"_blank",features);
30     }
31 }
32 function _doChromeWindowShowModalDialog(obj){
33     window.hasOpenWindow = false;
34     try {
35         doChromeWindowShowModalDialog(obj);
36     }catch(e){
37         
38     }
39 }

 

 子窗口点击确定或者关闭时:

if (window.opener != undefined && window.opener._doChromeWindowShowModalDialog) {
  //for chrome
  window.opener._doChromeWindowShowModalDialog(tmplInfo);
}

 

父窗口的回掉函数

function doChromeWindowShowModalDialog(obj){
    if(obj!=null){
      //TODO
    }
}

 

posted @ 2017-01-04 15:02 jackkke 阅读(23979) 评论(0) 推荐(1) 编辑
摘要: 1.首先找到环境变量配置的位置 2.添加JAVA系统变量 JAVA_HOME C:\Java\jdk1.7.0_80_32 配置classpath CLASS_PATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar 将java bin添加到系统变量path里 阅读全文
posted @ 2017-05-26 13:07 jackkke 阅读(1922) 评论(0) 推荐(0) 编辑
摘要: 使用eclispe搭建一个maven支持的Java web项目。 1.创建一个基于maven的项目,选择maven项目 2.勾选Create a simple project(……) 3.设置项目属性 4.完成之后会有错误提示[缺少web.xml]和警告[项目编译的jvm需要是1.5以上的],需要进 阅读全文
posted @ 2017-05-25 15:44 jackkke 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 1 /** 2 * @param date 3 * @param day 想要获取的日期与传入日期的差值 比如想要获取传入日期前四天的日期 day=-4即可 4 * @return 5 */ 6 public static Date getSomeDay(Date date, int day){ 7 Calendar ... 阅读全文
posted @ 2017-05-18 16:23 jackkke 阅读(14834) 评论(0) 推荐(0) 编辑
摘要: java数组声明的时候必须声明其长度,但当我们想对数组进行扩增的时候该怎么办呢? 下面三种方式都可以进行扩增,最后一种也最为方便。 阅读全文
posted @ 2017-05-17 15:57 jackkke 阅读(895) 评论(0) 推荐(0) 编辑
摘要: 1 /** 2 * @param data 3 * @param value 4 * @return 5 * 折半查找 6 */ 7 private static int binarySearch(int[] data, int value) { 8 int min = 0; 9 int ... 阅读全文
posted @ 2017-05-17 14:49 jackkke 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 1 public class Foreach { 2 public static void main(String[] args) { 3 Map map = new HashMap(); 4 5 //循环map的key的Set集合-->不推荐 6 for (String key : map.keySet())... 阅读全文
posted @ 2017-05-17 14:38 jackkke 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 1 package com.hangao.basic; 2 3 /** 4 * @author hangao hangao1204@hotmail.com 5 * 6 */ 7 public class TestInt { 8 public static void main(String[] args) { 9 Integer ie1 = 127... 阅读全文
posted @ 2016-11-14 16:03 jackkke 阅读(647) 评论(0) 推荐(0) 编辑
摘要: 1 package com.hangao.teststatic; 2 3 public class Animal { 4 static{ 5 System.out.println("Animal-static1"); 6 } 7 { 8 System.out.println("Animal-no-s 阅读全文
posted @ 2016-11-08 15:02 jackkke 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 1 package com.hangao.basic; 2 3 /** 4 * @author hangao hangao1204@hotmail.com 5 * 6 * continue 中断当前循环的当前次,继续当前循环的下一次(如果有),继续执行后面的代码 7 * 8 * break 中断当前循环的所有次,不再继续当前循环,继续外层嵌套循环的下... 阅读全文
posted @ 2016-11-08 10:41 jackkke 阅读(3017) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示