前段時間給公司做了一個類似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();