JS:window.open加一个callback(未完成)

有时必须用window.open了,window.showModalDialog的缺点也不少。

window.open最麻烦的是关闭时通知调用者,写了个callback来做。

现在没有处理直接点X关闭窗口的情况(估计是有点麻烦的了)。



Utils.showWindow 
= function(url,iWidth,iHeight,name,callback)
{
    
if (typeof(callback) == "string")
    {
        
if (url.indexOf("?">= 0)
            url 
+= "&callback=" + callback;
        
else
            url 
+= "?callback=" + callback;
    }
    
    
if (url.indexOf("?">= 0)
        url 
+= "&rnd=" + Math.random();
    
else
        url 
+= "?rnd=" + Math.random();

    
var iTop = (window.screen.availHeight-iHeight)/2;
    var iLeft = (window.screen.availWidth-iWidth)/2;
    var param = String.format("width={0},innerWidth={0},height={1},innerHeight={1},top={2},left={2},toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no",
                iWidth, iHeight , iTop, iLeft);
    window.open(url, name, param);
}


需要其它函数来:
Utils.QueryString 
= function(name)
{
  
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  
var r = window.location.search.substr(1).match(reg);
  
if (r != null)
      
return unescape(r[2]);
  
return null;
}

String.format 
= function() {
    
if( arguments.length == 0 )
        
return null;

    
var str = arguments[0];
    
for(var i=1;i<arguments.length;i++) {
        
if (arguments[i] == null)
            arguments[i] 
= "";
            
        
var re = new RegExp('\\{' + (i-1+ '\\}','gm');
        str 
= str.replace(re, arguments[i]);
    }
    
return str;
}

调用方:
function btnTest_Click() {
    Utils.showWindow(
"Test.aspx"600400"Import""OnTestCallBack");
}

function OnTestCallBack(updated)
{
    
if (updated)
    {
        alert(
"CallBack is true");
    }
}

被调用方:
function btnClose_Click()
{
    
var callback = Utils.QueryString("callback");
    
if (callback != null && window.opener != null && window.opener[callback] != undefined)
    {
        callback 
= window.opener[callback];
        callback(
true);
    }
    
    window.close();
}


其它功能未完成……
原文地址:https://www.cnblogs.com/nonlyli/p/1361187.html