有时必须用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();
}
其它功能未完成……