如何在 Outlook 加载项 Javascript API 中查看电子邮件的 To/CC 字段的变化?
How do I watch for changes to the To/CC fields for emails in Outlook Add-In's Javascript API?
在旧版 Office API 的文档中,我发现可以在用户撰写电子邮件时监视 TO/CC 字段的更改。这是否在他们针对 Office 365 的新 Javascript API 中公开?无论哪种方式,我似乎都找不到明确的答案。
据我所知,您无法在 "real-time" 中检测到这一点。邮箱 API 几乎没有您可以挂接的事件。
这可能不是您希望得到的答案,因为我找不到任何关于您描述的观察者的参考资料,但这是我的 "inelegant, but it works" 解决方案。
在您的加载项中,声明一个名为 toRecipients
的全局(对应用程序)变量。接下来,在 Office.initalize
函数中添加以下代码来初始化 toRecipients
变量,然后启动一个循环来检查更改。
var item = Office.context.mailbox.item;
if (item.itemType === Office.MailboxEnums.ItemType.Message) {
item.to.getAsync(function(result) {
toRecipients = result.value;
});
}
setInterval(function(){ isToRecipientsChanged(); }, 1000);
这是检查更改的代码。我使用 equals
函数来检查 "To" 收件人是否已更改。
function isToRecipientsChanged() {
var item = Office.context.mailbox.item;
item.to.getAsync(function(result) {
if (!toRecipients.equals(result.value)) {
toRecipients = result.value;
}
});
}
最后,这是我使用的equals
方法。我从另一个 Whosebug question 那里得到的。请注意,我将检查更改为检查电子邮件地址而不是对象实例。
Array.prototype.equals = function (array) {
// if the other array is a falsy value, return
if (!array)
return false;
// compare lengths - can save a lot of time
if (this.length != array.length) {
return false;
}
for (var i = 0, l=this.length; i < l; i++) {
// Check if we have nested arrays
if (this[i] instanceof Array && array[i] instanceof Array) {
// recurse into the nested arrays
if (!this[i].equals(array[i]))
return false;
}
else if (this[i].address != array[i].address) {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
}
这就是我的 "inelegant, but it works" 解决方案。但是,如果您向我提供您在问题中引用的旧文档,我会四处询问,看看新的 API 是否能让您更有效地(更优雅地)完成这项任务。
在旧版 Office API 的文档中,我发现可以在用户撰写电子邮件时监视 TO/CC 字段的更改。这是否在他们针对 Office 365 的新 Javascript API 中公开?无论哪种方式,我似乎都找不到明确的答案。
据我所知,您无法在 "real-time" 中检测到这一点。邮箱 API 几乎没有您可以挂接的事件。
这可能不是您希望得到的答案,因为我找不到任何关于您描述的观察者的参考资料,但这是我的 "inelegant, but it works" 解决方案。
在您的加载项中,声明一个名为 toRecipients
的全局(对应用程序)变量。接下来,在 Office.initalize
函数中添加以下代码来初始化 toRecipients
变量,然后启动一个循环来检查更改。
var item = Office.context.mailbox.item;
if (item.itemType === Office.MailboxEnums.ItemType.Message) {
item.to.getAsync(function(result) {
toRecipients = result.value;
});
}
setInterval(function(){ isToRecipientsChanged(); }, 1000);
这是检查更改的代码。我使用 equals
函数来检查 "To" 收件人是否已更改。
function isToRecipientsChanged() {
var item = Office.context.mailbox.item;
item.to.getAsync(function(result) {
if (!toRecipients.equals(result.value)) {
toRecipients = result.value;
}
});
}
最后,这是我使用的equals
方法。我从另一个 Whosebug question 那里得到的。请注意,我将检查更改为检查电子邮件地址而不是对象实例。
Array.prototype.equals = function (array) {
// if the other array is a falsy value, return
if (!array)
return false;
// compare lengths - can save a lot of time
if (this.length != array.length) {
return false;
}
for (var i = 0, l=this.length; i < l; i++) {
// Check if we have nested arrays
if (this[i] instanceof Array && array[i] instanceof Array) {
// recurse into the nested arrays
if (!this[i].equals(array[i]))
return false;
}
else if (this[i].address != array[i].address) {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
}
这就是我的 "inelegant, but it works" 解决方案。但是,如果您向我提供您在问题中引用的旧文档,我会四处询问,看看新的 API 是否能让您更有效地(更优雅地)完成这项任务。