前段时间给公司做了一个类似QQ的Asp.net在线聊天程序,与服务器之间的通讯是通过前台页面的定时 器到服务器上的临时消息目录中取得相关信息来实现的,消息结构XML,为了避免对服务器造成太大的压 力就只开了一个定时器,也没敢多开,程序完成后由于测试条件限制只在少的可怜的几台机器上测试了一 下,效果还算可以吧,目前能实现发送文字,图片,文件查看历史记录,网络硬盘等基本功能,由于聊天 窗口是嵌套在公司主框架里面的所以得实现聊天主窗体和聊天窗体以及一些其他窗体之间指针的引用问题 ,避免某个聊天窗口被打开多次,或者聊天窗口而主窗口也不知道的问题,下面介绍下程序中用 javascript实现的窗口机制:
看其他人的程序是很困难的,所以先介绍下例子实现的效果:首先创建一个 MainFrm.htm窗体(启动 窗体),用它打开a.htm窗口,a.htm窗体只能打开一个,在a.htm窗体中可以打开b.htm和c.htm,当然 b.htm和c.htm窗口也只能打开一个,然后当MainFrm.htm关闭时让a.htm,b.hml和c.htm也跟着关闭,或者 a.htm关闭时让b.htm和c.htm也关闭
1、MainFrm窗体
为了方便应用,我对数组方法进行扩展,添加了add,remove,clear三个方法
代码
if (!Array.prototype.add) {
Array.prototype.add = function() {
var startLength = this.length;
for (var i = 0; i < arguments.length; i++)
this[startLength + i] = arguments[i];
return this.length;
};
}
if (!Array.prototype.remove) {
Array.prototype.remove = function(index) {
if(index>=0 && index<this.length)
{
this.splice(index,1);
}
};
}
if (!Array.prototype.clear) {
Array.prototype.clear = function() {
this.splice(0,this.length);
};
}
定义一个存放注册窗口的缓存数组
//已注册的窗口数组
var g_oWindowArray=new Array();