0

我正在使用 ActiveXObject 来处理 lync 状态更改并通过下面的 javascript 显示存在

var Instant = {

sipUri: "name@address.com", // Change this to the user's SIP URI you want to chat with
nameCtl: new ActiveXObject('Name.NameCtrl.1'),

onStatusChange: function (name, status, id) {
    alert(name + " " + status + " " +id);
},

showOOUI: function () {

var oouiX = 0, oouiY = 0;

oouiX += pawn_icon.offsetLeft + pawn_icon.clientLeft - pawn_icon.scrollLeft;
oouiY += pawn_icon.offsetTop + pawn_icon.clientTop - pawn_icon.scrollTop;

Instant.nameCtl.ShowOOUI(Instant.sipUri, 0, oouiX, oouiY);
},

hideOOUI: function () {
    Instant.nameCtl.HideOOUI();
}
}

这个 html/javascript 将事件处理程序实际注册到事件:

<head>
    <title>Lync Presence Test</title>

    <!-- le JS -->
    <script type="text/javascript">
        if (Instant.nameCtl.PresenceEnabled) {
            Instant.nameCtl.OnStatusChange = Instant.onStatusChange;
            Instant.nameCtl.GetStatus(Instant.sipUri, "1");
        }
    </script>
</head>
<body>
<div id="presence" onmouseover="Instant.showOOUI()" onmouseout="Instant.hideOOUI()">Name<img id="pawn" name="pawn_icon"  src="Styles/images/LyncStatus/imnon.png" alt="Available"> </div>
</body>
</html>

正如标题所述,如果我加载页面,我会触发事件并获得预期的状态代码。但是,如果我更改状态,则会触发两个事件。第一个包含正确的状态码,第二个包含旧的状态码。这里的问题是我想更改为新状态,但陈旧的状态是最后触发的事件,因此它会覆盖新的更改。当我将鼠标悬停在此人的姓名上时,该事件也会触发 6 次。

Microsoft 的 Name.NameCtrl 对象的文档非常少,但据我了解 getstatus 方法和 onstatuschange 属性,它们正是我正在寻找的。

那么,statuschange 事件触发两次是否有原因,有没有办法抢占它或切换返回事件的顺序?另外,如果您将鼠标悬停在名称上,为什么会触发事件,因为没有发生状态更改?我想了解有关特定状态更改事件的更多信息,但我找不到任何东西。我也无权访问 lync 服务器,所以我必须进行客户端设置。

Name.NameCtrl 文档: http: //msdn.microsoft.com/en-us/library/bb802706 (v=office.14).aspx

我在哪里获得了存在功能的代码:http: //blog.instant-tech.com/2012/05/web-client-for-microsoft-lync-2010.html

4

1 回答 1

0

许多事件触发;但是,警报不能准确了解最后触发的事件。事件以正确的顺序触发。我只是在代码中添加了一个 switch 语句来处理更改图片 bas

于 2012-12-19T08:22:36.047 回答