大多數Windows程序都有桌面提醒(Popup)功能,如Msn Messenger,Outlook2003,FoxMail,SharpReader等,對用戶來說可以非常的方便最新的信息。
在Web中借用IE5.5+的Popup,也可以實現類似的功能,在CnForums1.2中新增了一種特性就是類似于Outlook2003一樣,當有新帖子/私人留言時就有Popup提示,如圖:
現在就技術問題介紹一下:
一,什么是Popup
在IE5.5+中開始支持的Popup窗口有很多很特別的特性:
- Popup窗口可以超出瀏覽器窗口區域;
- 可以不用擔心被下拉框、flash、Iframe等這些東西遮擋;
- 即時窗口沒有焦點,Popup窗口也可以彈出并顯示
- 一個Popup窗口打開后,當在它的區域以外點擊或者另一個Popup窗口被打開時都會自動關閉;
- Popup窗口是沒有焦點的;
- 用戶不能改變Popup窗口大小;
- Popup窗口中的內容是不能被選擇的;
- ......
?只是Web下的Popup比起Windows中的Popup還是弱一些,但是已經夠用了。Msdn上對Popup有非常詳細的介紹“Using the PopupObject (Internet Explorer - DHTML)”
二,怎么創建一個Popup
Msdn上的示例代碼:
//
創建Popup對象
var
oPopup
=
window.createPopup();
//
Popup對象和Window對象一樣,里面包含了一個完整的HTML文檔
var
oPopupBody
=
oPopup.document.body;

//
在Body中插入HTML
oPopupBody.innerHTML
=
"
Display some <B>HTML</B> here.
"
;
//
設置顯示的位置、大小、參照物
oPopup.show(
100
,
100
,
200
,
50
, document.body);
三,Popup的顯示
多個Popup不能共存(Popup中創建Popup除外),所以web中的Popup不方便像Msn Messenger的Popup提示那樣“爬樓梯”,所以最簡單有效的方法就是像Outlook2003的Popup一樣,逐個Popup提醒。
(參考WebMessenger的實現)用Js建個隊列,將需要Popup提示的內容都放在隊列中,用一個定時器,定時從隊列中取一個Popup,每個Popup顯示7秒。
四,怎么知道有新帖子
在Web程序中,只能通過“拉”的技術,即定時向服務器發送請求——通過定時刷新或者是xmlhttp的Get。
我們需要有個時間戳來記錄最后請求時間,這樣就好根據這個時間戳來獲取時間戳之后的帖子。
如果每次根據時間戳來獲取最新帖子,服務器負荷比較大,因為并不是每次請求都有新帖子的,優化一下,再給每個在線用戶設置有無新帖子、有無新留言的狀態位,當發表新帖子后更新每個人的“有無新帖”狀態位。這樣每次請求時先判斷有沒有新帖子,如果有新帖子,才獲取所有帖子的標題和內容簡要。
五,具體實現
客戶端代碼:http://webuc.net/MyProject/Popup/popup.htm
http://webuc.net/MyProject/Popup/popup.rar
和論壇程序的結合:
demo: http://bbs.openlab.net.cn (登錄后有新帖子即提示(IE5.5+))
http://bbs.openlab.net.cn/PostAttachment.aspx?PostID=376725
參考文章:無限菜單之 xml+popup 版(IE5.5+)