使用具有executeFunction功能区按钮的dialogApi执行对话框时,executeFunction事件永远不会在Outlook for Windows中完成。 在清单中我们称之为函数" x"触发对话框并添加事件处理程序。
function x(evt) { _event = evt; ...}
Office.context.ui.displayDialogAsync(settings, function (asyncResult) {
_dialog = asyncResult.dialog;
_dialog.addEventHandler(Office.EventType.DialogMessageReceived, messageHandler);
_dialog.addEventHandler(Office.EventType.DialogEventReceived, eventHandler);
})
function messageHandler() { _event.completed(); }
function eventHandler() { _event.completed(); }
更新:
1.在清单中,有一个执行功能的功能区按钮定义。该函数接受从功能区按钮单击传递的事件参数,并调用Office.context.ui.displayDialogAsync api以打开对话框。事件参数保存到全局变量,以便稍后可以在对话框事件处理程序中调用它。单击功能区按钮时,对话框将正常打开,但是,当对话框关闭时,似乎没有调用event.completed。附图运行约10-15分钟
2.原始帖子附有代码片段
3.使用的平台是Windows 10上的Outlook 2016,带有IE 11和Edge
*奇怪的行为:出于调试目的,在每个事件处理程序上触发任意异步请求。在调用event.completed之前发出请求时,事件成功完成。
答案 0 :(得分:0)
我测试了以下代码并且它可以工作:
var globalEvent;
function eventHandler()
{
globalEvent.completed(true);
}
function dialogCallback(asyncResult)
{
_dialog = asyncResult.value;
_dialog.addEventHandler(Office.EventType.DialogEventReceived, eventHandler);
}
function ExecuteFunctionMailRead1(event)
{
globalEvent = event;
Office.context.ui.displayDialogAsync("http://contoso.com/", {height: 30, width: 20}, dialogCallback);
}
我认为问题在于你需要这样做: _dialog = asyncResult.value; 代替 _dialog = asyncResult。对话框;