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 " 600 400 " 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/archive/2008/12/24/1361187.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值