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