解决谷歌浏览器不支持模态窗口返回值的问题

一、使用背景:

  • window.showModalDialog(url, parameter, winStyle)用于在当前窗口打开一个子窗口,并返回子窗口中设置的返回值。
  • 正常情况下,它可以实现在子窗口关闭后返回值到父窗口,但是在谷歌浏览器中发现,获取不到返回值。

二、解决方法:

  1. 可以在子页面中,窗口关闭时直接设置父页面的值,这样就不需要获取返回值;
  2. 如果子页面被多个地方调用,不期望修改子页面。可以在父页面加一个判断,当浏览不是chrome时,正常使用showModalDialog;当为chrome时,使用window.open代替:var windowOpen=window.open()得到子页面对象,windowOpen.returnValue就可以拿到返回值。直接这样调用的话会发现返回值还是获取不到,原因可能是window.open不会阻塞原方法,就是它不会等到子页面输入完成再return,而是直接return了,所以获取不到。

三、解决思路:

  • 可以在父页面加一个setInterval监听子页面的关闭,检测到页面关闭时,就可以获取到返回值。
  • 也可以在子页面关闭时回调父页面的js方法。

部分代码:

if(navigator.userAgent.indexOf("Chrome")>-1){
     var winOpen=window.open(url,"_blank",winStyle);
     var timer=window.setInterval(function(){
           if(winOpen.closed==true){
                  if(winOpen.returnValue!=null){
                         //业务代码,winOpen.returnValue就是从子页面获取的返回值
                  }
           }
     });
}else{
     if(window.showModalDialog){
          return window.showModalDialog(url, parameter, winStyle);
     }
}

猜你喜欢

转载自blog.csdn.net/navymei10220214/article/details/82893284