如果你想要像Office Communicator内置的联系人状态显示效果,方法不止一种,本文还是使用NameCtrl控件,利用它的一个方法(GetStatus)和一个事件(OnStatusChange)来完成这样的效果。
下面来介绍一下GetStatus方法和OnStatusChange事件:
GetStatus(bstrName, bstrID)
此方法用来订阅联系人的状态信息。它的参数 bstrName表示联系人的账号;而参数 bstrID则是一个HTML元素的ID,这个ID有什么用呢?请往下看。
MyOnStatusChange(name, status, id)
当通过GetStatus订阅的联系人状态发生了改变,就会触发此事件。它的参数 name表示联系人的账号;参数 status表示联系人的当前状态,是一个int值,下面我会列出可能的值和其含义;参数 id就是我们调用GetStatus是传入的参数bstrID了。
在我的测试中发现,status的值和Office Communicator的默认状态有如下对应关系:
0:空闲
1:显示为脱机;脱机
2:离开
3:忙碌
4:马上回来
9:请勿打扰
中间空了几个是什么我也不知道。
那么在我们的网页中如何使用这两个方法呢?
首先,我们在初始化联系人列表时,在所有联系人前面默认添加一个状态图标(这个图标可以显示为脱机状态),然后,调用GetStatus方法来订阅所有联系人的状态信息。
NameObj.GetStatus(childNode.Attributes[
"
Email
"
], childNode.ImageElement().id);
然后,处理OnStatusChange事件,根据传入参数来改变UI的中相应的状态图标。
function
MyOnStatusChange(name, status, id)
{
var img = document.getElementById(id);
img.src = " images/ " + status + " .png " ;
}
{
var img = document.getElementById(id);
img.src = " images/ " + status + " .png " ;
}
最后,别忘了初始化NameCtrl控件并为其绑定OnStatusChange事件。
function
InitializeObject()
{
try
{
NameObj = new ActiveXObject( " Name.NameCtrl " );
NameObj.OnStatusChange = MyOnStatusChange;
}
catch (e){}
}
InitializeObject();
{
try
{
NameObj = new ActiveXObject( " Name.NameCtrl " );
NameObj.OnStatusChange = MyOnStatusChange;
}
catch (e){}
}
InitializeObject();
OK,看一下最终的效果吧:
不过NameCtrl有个缺陷,如果你为Office Communicator定制了自定义状态,那么这些自定义状态被NameCtrl捕获后,永远是空闲(0)状态。
转自: http://www.cnblogs.com/xiaoshatian/archive/2008/08/04/1258399.html