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

来源:互联网 发布:32寸网络电视价格 编辑:程序博客网 时间:2024/06/05 14:37

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);

     }

}


0 0