在父窗口上创建一个数组来记录每个打开的dialog,使用命名键来索引窗口,如(父窗口中):
var arrFriend = new Array(); //窗口数组全局变量function openWin(argName){
  var arrArgument = new Array(); //传递的参数,局部变量
  if(arrFriend[argName]){
    alert("此朋友的窗口已打开");
    return;
  }
  arrArgument["name"] = argName; //John is friend's name
  arrArgument["window"] = window; //父窗口对象
  arrFriend[argName] = window.showModelessDialog("xxx.html",arrArgument,"");
}
在关闭这个dialog窗口时清除数组中的相应变量即可:
(dialog中)
window.onclose = clear;
function clear(){
  var arrArgument = window.dialogArguments;
  arrArgument["window"].arrFriend[arrArgument["name"]] = null;
}
需要注意的是openWin中我传递的是name,这并不安全(有可能friend的名字相同),安全的做法是这个参数使用唯一关键字来定义每个窗口的数组键名。