Outlook WebAddin throwing internal server error when registering Office.EventType.ItemChanged
在我的 Outlook WebAddin 中,我正在尝试使用以下代码注册邮件 ItemChange 事件。
1 2 3 4 5 | Office.context.mailbox.addHandlerAsync(Office.EventType.ItemChanged, mailItemSelectionChanged, [], function (result) { if(result && result.status != 'succeeded'){ console.error('result => ' + result); } }); |
每当用户在固定模式下更改邮件时,我都会第一次收到邮件更改事件。然后,如果对话发生变化,我将使用 location.reload() 重新加载插件以清除缓存并重新加载插件。
重新加载插件后,无法注册mailItemChange事件并抛出以下错误:
{"code": 5001,"message":"An internal error has occurred.","name":
"Internal Error"}
它在浏览器和一些 Windows 机器中失败(在许多其他情况下工作)。
前景诊断:
{"host":"Outlook","platform":"OfficeOnline","version":
"16.0.9215.1000"}
关于 Office.EventType.ItemChanged 事件注册,我可以找出以下行为:
因此,在您的情况下,您需要在调用 location.reload() 之前取消注册事件,如下所示。
1 2 3 4 5 6 7 8 9 10 | Office.context.mailbox.removeHandlerAsync(Office.EventType.ItemChanged, {handler: mailItemSelectionChanged}, function(result) { if (result.status === Office.AsyncResultStatus.Failed) { console.log('Item Change event could not be unregistered.'); console.log(result.error); } else { console.log('Item Change event unregistered successfully.'); } }); setTimeout(function() {location.reload();}, 100); |
那些想从他们的插件导航到相同或另一个网页的人,他们可以将点击事件处理程序附加到锚标记(或按钮),以确保 ItemChanged 事件处理程序在当前事件处理程序之前已被取消注册页面已卸载。我已使用以下代码完成此操作:
1 2 3 4 5 6 7 8 9 10 11 12 | $(document).ready(function() { $('.NavBarContainer a').toArray().forEach(function(anchor1, index) { $(anchor1).click(function(event) { if(itemChangeEventRegistered) { unregisterItemChangeHandler(); setTimeout(function() {window.location = anchor1.href;}, 100); return false; } return true; }); }); }); |